in_addr_t inet_ntoa 等类型的地址是啥
Posted
技术标签:
【中文标题】in_addr_t inet_ntoa 等类型的地址是啥【英文标题】:what are addresses of type in_addr_t inet_ntoa etcin_addr_t inet_ntoa 等类型的地址是什么 【发布时间】:2011-09-25 17:05:56 【问题描述】:好的,在发布这个问题之前,我已经在这里检查了线程 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 *
在标准输出上打印192.168.1.1 类型的输出。
【问题讨论】:
根据您一直在问的问题,我建议您阅读 Comer 的经典 Internetworking with TCP/IP 之类的书。 【参考方案1】:众所周知(我们知道,对吗?)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
代表什么?
【讨论】:
您没有指定最重要的东西 - 字节顺序。其他一切都很明显。 @Simon 你能扩展一下吗? @cnicutar 网络字节顺序为大端。您必须使用诸如htons
/htonl
(“主机到网络,短/长”)或ntohs
/ntohl
(“网络到主机,短/长”)之类的函数来获取正确的值,无论架构。以上是关于in_addr_t inet_ntoa 等类型的地址是啥的主要内容,如果未能解决你的问题,请参考以下文章