繁体   English   中英

u_int32_t和bpf_u_int32

[英]u_int32_t vs bpf_u_int32

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

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

我很好奇知道区别

程序员为生活增加了间接层。 它们几乎肯定是相同的类型,您可以在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 但是,这不会阻止人们为其创建自己的别名。

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

始终从您真正使用的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;

#万一

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM