如何将标准IP地址格式字符串转换为十六进制和长?

时间:2009-01-29 09:53:31

标签: c++ format ip-address

有谁知道如何从标准IP地址格式字符串(“xxx.xxx.xxx.xxx”)获取十进制或十六进制的IP地址?

我尝试使用inet_addr()函数,但没有得到正确的结果。

我在“84.52.184.224”

上测试了它

函数返回3770168404,这是不正确的(正确的结果是1412741344)。

谢谢!

5 个答案:

答案 0 :(得分:24)

您刚刚从预期中反转了字节 - 它们位于network byte order

3770168404 = 0xE0 B8 34 54     network byte order
               |         |
                \       /
                 \     /
                  \   /
                   \ /
                   /\
                  /  \   
                 /    \
                /      \
               |        |
1412741344 = 0x54 34 B8 E0     machine order

您可以使用ntohl()从网络订单转换为机器订单。

答案 1 :(得分:7)

htonl,htons,ntohl,ntohs函数可用于在网络和本地字节顺序之间进行转换。

答案 2 :(得分:4)

返回的结果是正确的,字节按网络字节顺序排序

84 => 0x54
52 => 0x34
184 => 0xb8
224 => 0xe0
0xe0b83454 => 3770168404

答案 3 :(得分:2)

我认为您可能遇到了字节顺序问题。从手册页:

  

所有Internet地址都按网络顺序返回(从中订购的字节数)        左到右)。返回所有网络号和本地地址部分        作为机器字节顺序的整数值。

答案 4 :(得分:0)

仔细检查以下链接:

http:// msdn.microsoft.com/en-us/library/ms738563(VS.85).aspx