C IPv4到十进制不同的值?

C IPv4到十进制不同的值?,c,posix,C,Posix,为什么inet_pton和inet_addr(1734763876)的IPv4十进制值与使用这两个网站(1684366951)的IPv4十进制值不同 Endianness-它们的四个字节顺序相反: 1734763876 = 0x67 66 65 64 1684366951 = 0x64 65 66 67 URL等需要使用的值是“网络”顺序的值,最重要的字节在前。使用htonl()(主机到网络的长度)转换值,即 printf("%i\n%i\n", htonl(inet_addr("100

为什么inet_pton和inet_addr(1734763876)的IPv4十进制值与使用这两个网站(1684366951)的IPv4十进制值不同


Endianness-它们的四个字节顺序相反:

1734763876 = 0x67 66 65 64
1684366951 = 0x64 65 66 67
URL等需要使用的值是“网络”顺序的值,最重要的字节在前。使用
htonl()
(主机到网络的长度)转换值,即

printf("%i\n%i\n", htonl(inet_addr("100.101.102.103")), htonl(sin.sin_addr));

caf在下面指出,我可能有相反的观点:问题是您确实需要将套接字函数中的网络订单数据转换回主机订单以便显示,即

printf("%i\n%i\n", ntohl(inet_addr("100.101.102.103")), ntohl(sin.sin_addr));

inet_addr以网络字节顺序给出结果


1684366951和1734763876是相同的数字;-)如果您更改了尾数。

最好使用
inet\u ntop()
而不是
htonl
,因为它也处理IPv6。
inet\u addr()
inet\u ntop()
都是按网络字节顺序创建结果的。“问题”只是OP的
printf()
是按主机字节顺序解释的。哦,我倒过来了?谢谢/哦-好几年没有编程套接字了。
printf("%i\n%i\n", ntohl(inet_addr("100.101.102.103")), ntohl(sin.sin_addr));