有誰知道如何從標準IP地址格式字符串(「xxx.xxx.xxx.xxx」)獲取十進制或十六進制IP地址?如何將標準IP地址格式字符串轉換爲十六進制和長整型?
我試過使用inet_addr()函數,但沒有得到正確的結果。
我測試「84.52.184.224」
函數返回3770168404這是不正確(正確的結果是1412741344)。
謝謝!
有誰知道如何從標準IP地址格式字符串(「xxx.xxx.xxx.xxx」)獲取十進制或十六進制IP地址?如何將標準IP地址格式字符串轉換爲十六進制和長整型?
我試過使用inet_addr()函數,但沒有得到正確的結果。
我測試「84.52.184.224」
函數返回3770168404這是不正確(正確的結果是1412741344)。
謝謝!
htonl,htons,ntohl,ntohs函數可用於在網絡和本地字節順序之間進行轉換。
我想你可能會遇到字節順序問題。從手冊頁:
所有的Internet地址以網絡順序返回(字節順序從 從左到右)。所有網絡號和本地地址部分都會返回 作爲機器字節順序的整數值。
返回的結果是正確的,字節按網絡字節順序排序
84 => 0x54
52 => 0x34
184 => 0xb8
224 => 0xe0
0xe0b83454 => 3770168404
你剛剛得到了扭轉字節你所期望的 - 他們是在network byte order
3770168404 = 0xE0 B8 34 54 network byte order
| |
\ /
\ /
\ /
\/
/\
/\
/ \
/ \
| |
1412741344 = 0x54 34 B8 E0 machine order
您可以使用ntohl()從網絡訂單轉換爲機器訂單。
仔細檢查下面的鏈接:
的http:// msdn.microsoft.com/en-us/library/ms738563(VS.85).aspx
我注意到的字節順序是相反的。 e0b83454 - 5434B8E0。謝謝你的提示! – 2009-01-29 10:01:57