我正在研究套接字编程,并且学习了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?
答案 0 :(得分:0)
您不必使用uint32_t
来处理inet_addr
返回的值。您可以使用任何可以表示可能返回或在计算中使用的任何值的类型。但是为什么不使用uint32_t
或in_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类型的大小。 ..