0

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

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

我很想知道区别

4

3 回答 3

3

程序员为了谋生而添加了间接层。它们几乎可以肯定是相同的类型,您可以在 C++ 中检查,#include <typeinfo>后跟typeid(u_int32_t) == typeid(bpf_u_int32).

在某些实现中,至少有一种可能是unsigned int,另一种是unsigned long

发生的事情是两个不同的人独立地为 32 位无符号类型选择了一个名称(或者可能是同一个人用于两个稍微不同的目的)。其中一个使用了“bpf”前缀,在这种情况下代表 Berkeley Packet Filter,因为它与数据包捕获有关。另一个没有。一个使用了_t表示类型名称的后缀,另一个没有。除此之外,他们选择了相似的名字。

C99 和 C++11 都为 32 位无符号类型引入了标准名称:uint32_t. 不过,这不会阻止人们为它创建自己的别名。

于 2012-12-03T10:45:20.780 回答
1

这两种类型最有可能是 32 位无符号类型的 typedef。因此,它们可以被认为是等效的,并且它们之间没有有用的区别。

于 2012-12-03T10:44:02.683 回答
1

始终从您真正使用的 bpf.h 文件中检查类型。这是一个 bpf.h:

#ifdef MSDOS /* 必须是 32 位 */

typedef long bpf_int32;

typedef unsigned long bpf_u_int32;

#别的

typedef int bpf_int32;

typedef u_int bpf_u_int32;

#万一

于 2018-05-01T10:30:06.450 回答