You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 08:30:28