u_int32_t vs bpf_u_int32

时间:2012-12-03 10:38:40

标签: c++ c int

过去几天我一直在忙着做一些网络编程,我似乎无法弄清楚数据类型u_int32_t abd bpf_u_int32之间的区别。

u_int32_t表示32个无符号位。不是bpf_u_int32意思是一样的吗? 因为某些功能以一种形式或另一种形式读取IP地址。 pcap库中的某些函数(如pcap_lookupnet)要求网址为bpf_u_int32。

我很想知道差异

3 个答案:

答案 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