什么是in_addr_t inet_ntoa等类型的地址

时间:2011-06-30 06:06:03

标签: c sockets network-programming in-addr

在发布此问题之前,我已经检查了线程 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_tunsigned 32 bit int,我想知道那是什么,而不是char *在stdout上打印192.168.1.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代表什么?