【发布时间】:2020-09-15 12:49:27
【问题描述】:
有谁知道如何从标准 IP 地址格式字符串(“xxx.xxx.xxx.xxx”)中获取十进制或十六进制的 IP 地址?
我尝试使用 inet_addr() 函数,但没有得到正确的结果。
我在“84.52.184.224”上测试过
函数返回不正确的3770168404(正确结果为1412741344)。
谢谢!
【问题讨论】:
标签: c++ format ip-address
有谁知道如何从标准 IP 地址格式字符串(“xxx.xxx.xxx.xxx”)中获取十进制或十六进制的 IP 地址?
我尝试使用 inet_addr() 函数,但没有得到正确的结果。
我在“84.52.184.224”上测试过
函数返回不正确的3770168404(正确结果为1412741344)。
谢谢!
【问题讨论】:
标签: c++ format ip-address
您刚刚得到了与预期相反的字节 - 它们位于 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
【讨论】:
htonl、htons、ntohl、ntohs 函数可用于在网络和本地字节顺序之间进行转换。
【讨论】:
返回结果正确,字节按网络字节序排列
84 => 0x54
52 => 0x34
184 => 0xb8
224 => 0xe0
0xe0b83454 => 3770168404
【讨论】:
我认为您可能遇到了字节顺序问题。从手册页:
所有 Internet 地址均按网络顺序返回(字节顺序从 左到右)。返回所有网络号和本地地址部分 作为机器字节顺序整数值。
【讨论】: