过去几天我一直在忙着做一些网络编程,我似乎无法弄清楚数据类型u_int32_t abd bpf_u_int32之间的区别。
u_int32_t表示32个无符号位。不是bpf_u_int32意思是一样的吗? 因为某些功能以一种形式或另一种形式读取IP地址。 pcap库中的某些函数(如pcap_lookupnet)要求网址为bpf_u_int32。
我很想知道差异
答案 0 :(得分:3)
程序员为生活添加间接层。它们几乎肯定是同一类型,您可以使用#include <typeinfo>
后跟typeid(u_int32_t) == typeid(bpf_u_int32)
在C ++中检查它。
在某些实现中,至少有一种可能是unsigned int
而另一种是unsigned long
。
发生的事情是,两个不同的人已经为32位无符号类型独立选择了一个名称(或者两个略有不同的目的可能是同一个人)。其中一个使用了“bpf”前缀,在这种情况下,前缀代表Berkeley Packet Filter,因为它与数据包捕获有关。另一个没有。一个人使用了表示类型名称的_t
后缀,另一个没有。除此之外,他们选择了相似的名字。
C99和C ++ 11都引入了32位无符号类型的标准名称:uint32_t
。但这并不会阻止人们为它创建自己的别名。
答案 1 :(得分:1)
这两种类型很可能是32位无符号类型的typedef。因此,它们可以被认为是等价的,它们之间没有用处。
答案 2 :(得分:1)
始终从您正在使用的bpf.h文件中检查类型。这是一个bpf.h:
#ifdef MSDOS / *必须为32位* /
typedef long bpf_int32;
typedef unsigned long bpf_u_int32;
<强>的#else 强>
typedef int bpf_int32;
typedef u_int bpf_u_int32;
<强> #ENDIF 强>