过去几天我一直忙于做一些网络编程,我似乎无法弄清楚数据类型 u_int32_t 和 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
.不过,这不会阻止人们为它创建自己的别名。
关于c++ - u_int32_t 与 bpf_u_int32,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13681496/