C语言 in_addr_t inet_ntoa等类型的地址是什么

txu3uszq  于 2023-01-25  发布在  其他
关注(0)|答案(2)|浏览(151)

好的,在发布这个问题之前,我已经检查了这里的线程in_addr_t to string
我的问题不同。
我知道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到底是什么?为什么在套接字编程中一次又一次地使用它?如果我没记错的话,它被定义为
地址中的类型定义单元32_t;
所以如果in_addr_tunsigned 32 bit int,我想看看它是什么,而不是char *,它192.168.1.1在stdout上打印www.example.com类型的输出。

kb5ga3dv

kb5ga3dv1#

我们都知道(我们知道,对吧?)IPv4地址是用一个无符号的32位整数表示的。我们这些弱小的人类不太擅长处理大的数字(或小的数字),所以我们使用点十进制记数法。(你知道你现在在1076000524吗?我也不知道)
但是,由于您深入研究了netinet并发现了**the standard**明确指定的内容
<netinet/in.h>标头应定义in_addr结构,该结构应至少包括以下成员:
in_addr_t s_addr
那就是
in_addr_t等效于<inttypes.h>中所述的uint32_t类型
你可以打印出来。

printf("My unreadable addres is %u\n", in.s_addr);
    • 快,134744072代表什么?**
j8ag8udp

j8ag8udp2#

您必须将134744072转换为十六进制:printf(“我的不可读地址是%lX\n”,在.s_addr中);

  • 〉“%lX”表示长无符号十六进制。此地址为:8.8.8.8

相关问题