0

私は過去数日間、いくつかのネットワークプログラミングを行うのに忙しく、データ型u_int32_tabdbpf_u_int32の違いを理解できないようです。

u_int32_tは、32個の符号なしビットを意味します。bpf_u_int32は同じ意味ではありませんか?一部の関数は、何らかの形式でIPアドレスを読み取るためです。pcap_lookupnetなどのpcapライブラリの一部の関数では、ネットアドレスがbpf_u_int32の形式である必要があります。

違いを知りたい

4

3 に答える 3

3

プログラマーは生計を立てるために間接的なレイヤーを追加します。それらはほぼ確実に同じ型です。C++ では、#include <typeinfo>その後にtypeid(u_int32_t) == typeid(bpf_u_int32).

一部の実装では、少なくとも一方がunsigned intで、もう一方が である可能性がありunsigned longます。

何が起こったのかというと、2 人の異なる人が 32 ビット符号なし型の名前を別々に選択したということです (または、2 つのわずかに異なる目的で同じ人かもしれません)。そのうちの 1 つは「bpf」プレフィックスを使用しています。これは、このコンテキストでは、パケット キャプチャに関連しているため、Berkeley Packet Filter を表します。もう一方はそうではありません。_t1 つは型名を示すサフィックスを使用し、もう 1 つは使用していません。それとは別に、彼らは似たような名前を選びました。

C99 と C++11 の両方で、32 ビット符号なし型の標準名が導入されていますuint32_t。それでも、人々が独自のエイリアスを作成するのを止めることはできません。

于 2012-12-03T10:45:20.780 に答える
1

どちらの型も、ほとんどの場合、32 ビットの符号なし型に対する typedef です。そのため、それらは同等と見なすことができ、それらの間に有用な違いはありません。

于 2012-12-03T10:44:02.683 に答える