gpt4 book ai didi

c - 为什么 inet_aton 返回的十六进制数是倒序的?

转载 作者:太空宇宙 更新时间:2023-11-04 07:09:51 24 4
gpt4 key购买 nike

我想将一串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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com