[英]what are addresses of type in_addr_t inet_ntoa etc
好的,在发布这个问题之前,我已经检查了这里的线程in_addr_t 到字符串
我的问题是不同的。
我知道 .net_ntoa function 属于以下类型
char * inet_ntoa (struct in_addr in);
我想知道的是in_addr_t
是什么
在套接字程序中使用时将是什么表示形式。
我检查了.net.net/in.h>
typedef uint32_t in_addr_t;
struct in_addr {
in_addr_t s_addr;
};
属于上述类型。 我不想像 .net_ntoa 那样将 in_addr_t 打印到 char *。 我想看看in_addr_t是什么。那么它是怎么做到的或者in_addr_t到底是什么以及为什么在socket编程中一次又一次地使用它。 如果我没记错的话,它被定义为
typedef uint32_t in_addr_t;
因此,如果in_addr_t
是unsigned 32 bit
int,我想看看那是什么,而不是在标准输出上打印 192.168.1.1 类 output 的char *
。
众所周知(我们知道,对吗?) IPv4
地址是使用无符号 32 位 integer 表示的。 我们这些弱小的人类不太擅长处理大数(或小数),所以我们使用点十进制表示法。 (你知道你现在在1076000524
吗?我也不知道)。
但是,由于您通过netinet
挖掘并发现了标准明确规定的内容
<netinet/in.h>
header 应定义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
代表什么?
您必须将 134744072 转换为十六进制:printf("My unreadable address is %lX\n", in.s_addr);
-> "%lX" 用于长无符号十六进制。 这个地址是:8.8.8.8
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.