9

好的,在发布这个问题之前,我已经检查了这里的线程 in_addr_t 到字符串

我的问题不同。

我了解 inet_ntoa 函数属于以下类型

char * inet_ntoa (struct in_addr in);

我想知道的是什么in_addr_t

当它在套接字程序中使用时将是什么表示。

我检查了结构定义<netinet/in.h>

   typedef uint32_t in_addr_t;

   struct in_addr {
       in_addr_t s_addr;
   };

属于上述类型。我不想像 inet_ntoa 那样将 in_addr_t 打印到 char * 上。我想看看 in_addr_t 是什么。那么它怎么做或者 in_addr_t 到底是什么以及为什么它在套接字编程中一次又一次地使用。如果我没记错的话,它被定义为

typedef uint32_t in_addr_t;

所以如果in_addr_tunsigned 32 bitint 我想看看那是什么,而不是char *在标准输出上打印 192.168.1.1 类型的输出。

4

1 回答 1

17

众所周知(我们知道,对吗?)IPv4地址是使用无符号 32 位整数表示的。我们这些弱小的人类不太擅长处理大数(或小数),所以我们使用点十进制表示法。(你知道你现在在1076000524吗?我也不知道)。

但是,由于您仔细netinet研究并发现了标准明确规定的内容

<netinet/in.h>头应定义in_addr结构,该结构应至少包括以下成员:

in_addr_t s_addr

哪个是

in_addr_t 相当于中uint32_t描述的类型<inttypes.h>

你可以打印它。

printf("My unreadable addres is %u\n", in.s_addr);

快,134744072代表什么?

于 2011-06-30T07:57:36.850 回答