无符号长和 uint32_t?

unsigned long and uint32_t?

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

inet_addr function returns in_addr_t类型是uint32_t,那我是不是要用uint32_t类型的变量来处理呢?

书中例子是按unsigned long类型处理的,但我不明白为什么要这样处理

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

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

您也可以对 inet_addr() 函数使用 long 类型,因为大多数架构对 long 类型使用 32 位(4 字节),但并非总是如此适用

一些架构使用 64 位 用于 long 类型.. LP64 convention use 64 bits for long type

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

如果您使用 MSVC 编写程序,它使用 32 位长型。

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

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

推荐为inet_addr()使用uint32_t(又名无符号32位内存),所以你根本不需要关心 long 类型的大小...