什么是in_addr_t inet_ntoa等类型的地址

Reg*_*ser 8 c sockets network-programming in-addr

在发布此问题之前我已经检查了线程in_addr_t中的线程

我的问题不同.

我知道inet_ntoa函数属于以下类型

char * inet_ntoa (struct in_addr in);
Run Code Online (Sandbox Code Playgroud)

我想知道的是什么 in_addr_t

在套接字程序中使用它时的表示形式.

我检查了结构定义 <netinet/in.h>

   typedef uint32_t in_addr_t;

   struct in_addr {
       in_addr_t s_addr;
   };
Run Code Online (Sandbox Code Playgroud)

属于上述类型.我不想像inet_ntoa那样将in_addr_t打印到char*.我想看看in_addr_t是什么.它是如何完成的,或者究竟是什么in_addr_t以及为什么它在套接字编程中一次又一次地使用.如果我没有弄错,它被定义为

typedef uint32_t in_addr_t;

所以,如果in_addr_tunsigned 32 bitint我想看看是什么,而不是char *在stdout上打印192.168.1.1类型的输出.

cni*_*tar 16

众所周知(我们这样做,对吗?)IPv4地址使用无符号32位整数表示.我们用大数字(或小数字)对人类不太好,所以我们使用点十进制表示法.(你知道你现在在1076000524吗?我也没有).

但是,自从你挖掘netinet并发现标准明确规定了什么

<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);
Run Code Online (Sandbox Code Playgroud)

快,什么134744072代表什么?

  • 你没有指定最重要的东西 - 字节顺序.其他一切都很明显. (3认同)
  • @cnicutar 网络字节顺序是大端字节序。您必须使用“htons”/“htonl”(“主机到网络,短/长”)或“ntohs”/“ntohl”(“网络到主机,短/长”)等函数来获取正确的值,无论架构。 (2认同)