IPv4到十进制的不同值?

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

struct sockaddr_in sin; inet_pton(AF_INET, "100.101.102.103", &(sin.sin_addr)); printf("%i\n%i\n", inet_addr("100.101.102.103"), sin.sin_addr); 
  • http://www.allredroster.com/iptodec.htm
  • http://www.ipaddresslocation.org/convertip.php

字节序 – 它们具有相反顺序的四个字节:

 1734763876 = 0x67 66 65 64 1684366951 = 0x64 65 66 67 

您需要为URL等使用的值是“网络”顺序中的值,最重要的字节顺序。 使用htonl() (host-to-network-long)转换值,即

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

caf指出下面我可能有这个倒退:问题实际上是你需要将网络订单数据从套接字function转换回主机顺序进行显示,即

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

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

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