0

我正在学习套接字编程,并且学习了inet_addr函数。但我很困惑如何处理in_addr_t类型。

inet_addr函数返回in_addr_t类型 which is uint32_t,那么我必须使用uint32_t类型变量来处理它吗?

在书中,示例将其作为unsigned long类型处理,但我不明白为什么要使用这种方式。

unsigned long conv_addr = inet_addr(addr1); // unsigned long == uint32_t?
4

2 回答 2

0

您不必使用uint32_t来处理从inet_addr. 您可以使用可以表示任何可能返回的值或您可能在计算中使用的任何类型。但是为什么不使用uint32_torin_addr_t类型呢?

于 2018-08-06T05:37:55.643 回答
0

您也可以将long类型用于 inet_addr() 函数,因为大多数架构使用 32 位(4 字节)作为 long 类型,但它并不总是适用

一些架构使用64 位作为类型 。LP64 约定使用 64 位作为长类型

但是uint32_t的大小始终为32 位,与编译器遵循的约定无关。

如果您使用 MSVC 编写程序,它使用 32 位来表示 long 类型。

对于 gcc,它取决于计算机硬件和 GCC 的实现。

当您确信 long 大小为 32 位时,使用 unsigned long 分配给 inet_addr() 的返回类型是安全的。

推荐对 inet_addr() 使用uint32_t(又名无符号 32 位内存),这样就完全不需要关心 long 类型的大小了……

于 2018-08-06T06:09:29.820 回答