【问题标题】: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_tunsigned 32 bit int 我想看看那是什么而不是char * 在标准输出上打印192.168.1.1 类型的输出。

【问题讨论】:

  • 根据您一直在问的问题,我建议您阅读 Comer 的经典 Internetworking with TCP/IP 之类的书。

标签: c sockets network-programming in-addr


【解决方案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(“网络到主机,短/长”)之类的函数来获取正确的值,无论架构。
猜你喜欢
  • 2017-07-30
  • 2013-10-14
  • 1970-01-01
  • 2019-08-29
  • 2013-11-21
  • 2020-01-04
  • 2014-01-20
  • 1970-01-01
  • 2012-11-24
相关资源
最近更新 更多