![](/img/trans.png)
[英]memcpy in C++ doesn't copy u_int32_t to unsigned char*
[英]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.