![](/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.