在发布此问题之前,我已经检查了线程 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以及为什么它在套接字编程中一次又一次地使用。 如果我没有弄错,它被定义为
typedef uint32_t in_addr_t;
所以,如果in_addr_t
是unsigned 32 bit
int,我想知道那是什么,而不是char *
在stdout上打印192.168.1.1类型的输出。
答案 0 :(得分:15)
众所周知(我们这样做,对吗?)IPv4
地址使用无符号32位整数表示。我们用大数字(或小数字)对人类不太好,所以我们使用点十进制表示法。 (你知道你现在在1076000524
吗?我也没有。)
但是,由于您挖掘了netinet
并找出了 the standard
<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
代表什么?