我想将一串IP地址转换成对应的十六进制数。下面是这样做的程序,但我得到了倒数。例如,如果字符串为 128.2.194.242,则结果为 f2c20280。当我尝试使用 inet_ntoa 从十六进制字符串转换为 IP 时,也会发生同样的事情。程序有什么问题?
int main(int argc, char *argv[]){
struct in_addr in;
if((inet_aton(argv[1], &in)) == 0)
error("inet_ntoa");
printf("hex: %x", in.s_addr);
return 0;
}
最佳答案
您的主机字节顺序和网络字节顺序不匹配。当您调用 inet_aton
时,地址以网络字节顺序存储在内存中。当您使用 %x
格式说明符调用 printf
时,它会使用主机字节顺序打印相同的内存区域。如果调用 ntohl
,它将 long
从网络字节顺序转换为主机字节顺序,在打印地址之前,您将看到地址以“正确”顺序打印:
int main(int argc, char *argv[]){
struct in_addr in;
if((inet_aton(argv[1], &in)) == 0)
error("inet_ntoa");
printf("hex: %x", ntohl(in.s_addr));
return 0;
}
关于c - 为什么 inet_aton 返回的十六进制数是倒序的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29313573/