好的,在发布这个问题之前,我已经检查了这里的线程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_t
是unsigned 32 bit
int,我想看看它是什么,而不是char *
,它192.168.1.1在stdout上打印www.example.com类型的输出。
2条答案
按热度按时间kb5ga3dv1#
我们都知道(我们知道,对吧?)
IPv4
地址是用一个无符号的32位整数表示的。我们这些弱小的人类不太擅长处理大的数字(或小的数字),所以我们使用点十进制记数法。(你知道你现在在1076000524
吗?我也不知道)但是,由于您深入研究了
netinet
并发现了**the standard**明确指定的内容<netinet/in.h>
标头应定义in_addr
结构,该结构应至少包括以下成员:in_addr_t s_addr
那就是
in_addr_t
等效于<inttypes.h>
中所述的uint32_t
类型你可以打印出来。
134744072
代表什么?**j8ag8udp2#
您必须将134744072转换为十六进制:printf(“我的不可读地址是%lX\n”,在.s_addr中);