2014-04-16 60 views
0

任何人都知道MySql INET_NTOA()如何將整數值轉換回IP地址格式?我想知道內部如何執行計算以將IP轉換爲其原始的互聯網標準點分十進制格式。INET_NTOA的工作

回答

1

它分解的整數成使用網絡byte order(大端)四個字節:

167773449 => A0 00 05 09 

然後,它以一個點之間連接這些字節一起:

10.0.5.9 
+0

如何將167773449轉換爲A0 00 05 09?你能解釋一下手動計算嗎? –

+1

@VishnuY我抓住了我的卡西歐,並將其轉換:)典型的十進制 - >十六進制轉換。 –

+0

但我得到的相應值是A000509。 –

0

在二進制寫入16777343:
開始從LSB開始分組比特(以8個爲一組形成一個字節):
[1] [0000 0000] [0000 0000] [0111 1111]
而現在在小端排序的形式小數寫入(最小顯著字節開始):
127.0.0.1

這可以通過使用驗證:

struct sockaddr_in antelope;
inet_aton(「127.0.0.1」,& antelope.sin_addr); //將IP存儲在羚羊中
printf(「%lld \ n」,antelope.sin_addr.s_addr); //打印16777343
printf(「%s \ n」,inet_ntoa(antelope.sin_addr)); //打印127.0.0.1

我希望它有幫助。