unsigned long和uint32_t?

时间:2018-08-06 05:26:55

标签: c sockets unsigned-long-long-int uint32-t

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

inet_addr函数返回in_addr_t类型的uint32_t,那么我是否必须使用uint32_t类型变量来处理它?<​​/ p>

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您也可以将 long 类型用于inet_addr()函数,因为大多数体系结构都将32位(4字节)用于long类型,但这并不总是适用

某些体系结构将 long 类型使用 64位LP64 convention use 64 bits for long type

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

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

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

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

推荐,对于inet_addr()使用 uint32_t (也称为无符号32位内存),因此您根本不需要关心long类型的大小。 ..