使用gethostid()与inet_ntoa()转换后IP地址顺序错误的问题求助
gethostid()与inet_ntoa()转换后IP地址顺序错误的问题求助
大家好,我现在碰到一个棘手的bug,想打印我RedHat机器的IP地址,原本的思路是用gethostid()先拿到主机ID,再用inet_ntoa()把这个ID转换成字符串格式的IP。
但结果的IP顺序完全不对!我的实际IP是172.30.223.27,但转换出来的却是30.172.27.223——不是正常的a.b.c.d,变成了b.a.d.c这种乱序的结构。
我知道这类网络函数通常会涉及字节序(大小端)的问题,但我原本以为不注意字节序只会得到完全反转的IP,现在这种乱序的情况让我有点摸不着头脑。我怀疑是不是gethostid()返回的值本身就有问题,但实在搞不懂为什么会返回这样的主机ID。
给大家列一下具体的数值对应关系:
- 实际IP:172.30.223.27
gethostid()返回的十进制值:514595807- 转成十六进制是
1EAC1BDF,拆成字节后就是30.172.27.223
我的代码片段如下:
#include <arpa/inet.h> #include <iostream> #include <netinet/in.h> #include <sys/param.h> #include <sys/socket.h> int main() { long hostid = gethostid(); std::cout << "Host ID: " << hostid << std::endl; struct in_addr addr; addr.s_addr = hostid; std::cout << "IP Address: " << inet_ntoa(addr) << std::endl; return 0; }
有没有大佬能帮忙分析下问题出在哪?要怎么调整才能得到正确的IP地址呢?
备注:内容来源于stack exchange,提问作者Monsterhmc
相关产品推荐
相关产品推荐

