簡體   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