1

我利用winapi函数inet_ntoa将无符号长十进制数转换为IP地址。我正在反向获取IP地址。我使用网站 http://www.allredroster.com/iptodec.htm来获取十进制相当于输入的IP地址。

for ex decimal equivalent of 206.117.16.66 is 3463778370

如果我使用函数 inet_ntoa 取回 ip,它给出的 ip 为66.16.117.206。下面是相同的代码,请让我知道正确的方法。

  #include<stdio.h>
  #include<WinSock2.h>
  #pragma comment(lib, "Ws2_32.lib")

  int main()
  {

       ULONG ipdec=0;
       struct in_addr ipadr;
       char ip[50];
       printf("\n Enter the ip address in decimal equivalent of ip address : ");
       scanf_s("%ld",&ipdec);
   ipadr.S_un.S_addr=ipdec;
       strcpy_s(ip,inet_ntoa(ipadr));
   printf("\n The ip address in dotted format is :  %s \n" ,ip);

  }
4

3 回答 3

4

inet_ntoa被指定为以网络字节顺序获取其输入。您以主机字节顺序提供输入,这在 x86 系统上是向后的(小端与大端)。您需要先传递十进制地址htonl

于 2013-07-06T11:41:54.613 回答
3
206 = 11001110
117 = 01110101
16  = 00010000
66  = 01000010



(11001110 01110101 00010000 01000010) = 3463778370

转换为二进制。但他们在一起并转换为十进制。

于 2013-07-06T11:47:45.333 回答
2

使用htonl(代表主机到网络长)将ip地址从主机字节顺序转换为网络字节顺序。它适用于小端和大端机器。

ULONG ipnet = htol(ipdec)
于 2013-07-06T11:56:46.657 回答