十进制到IP地址

时间:2013-07-06 11:38:22

标签: c winapi

我已经利用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 .Below是相同的代码,请让我知道正确的方法。

  #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);

  }

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

206 = 11001110
117 = 01110101
16  = 00010000
66  = 01000010



(11001110 01110101 00010000 01000010) = 3463778370

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

答案 2 :(得分:2)

使用htonl(代表主机到网络长)将IP地址从主机字节顺序转换为网络字节顺序。它适用于little-endian和big-endian机器。

ULONG ipnet = htol(ipdec)