我已经利用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);
}
答案 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)