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

5

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

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

我在“84.52.184.224”上进行了测试

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

谢谢!

5个回答

24

你得到的字节顺序与预期相反 - 它们是按网络字节序排列的

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

你可以使用ntohl()函数将网络字节序转换为主机字节序。


8

htonl,htons,ntohl,ntohs函数

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


4
返回结果正确,字节按照网络字节顺序排列。
84 => 0x54
52 => 0x34
184 => 0xb8
224 => 0xe0
0xe0b83454 => 3770168404

2
我认为你可能遇到了字节顺序问题。来自手册的说明如下:
所有互联网地址都以网络顺序返回(字节从左到右排序)。所有网络号和本地地址部分都以机器字节顺序整数值返回。

我注意到字节顺序是反的。e0b83454 - 5434B8E0。感谢您的提示! - Niko Gamulin

0
请仔细检查以下链接:
http://msdn.microsoft.com/zh-cn/library/ms738563(VS.85).aspx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接