私は本業の C 開発者ではありません... 実を言うと、私は本業の開発者ではないので、使用している用語が間違っている可能性があります。
私はこの 1 時間ほど、define
ステートメントについて、次にpointer
参照について読んでいて、次の例にかなり混乱しています。
与えられた:
#define get_u_int16_t (X,O) (*(u_int16_t *)(((u_int8_t *)X) + O))
if (get_u_int16_t(packet->payload, 0) == htons(0x0004)) {
//do something
return;
}
get_u_int16_t(packet->payload, 0)
これは、 がポインターによって参照されるデータpacket->payload
を 8 ビット セクションに分割し、最初の 8 ビットを返すことを意味します+ 0
か?
これは、予約しようとしている nDPI ライブラリの afp.c の一部からの例です。
[ノート]
htons()は、word
(16 ビット) をホスト バイト オーダー (ほとんどのマシンではリトル エンディアン、ビッグ エンディアン マシンではビッグ エンディアン) で取り、それをword
ネットワーク バイト オーダー (常にビッグ エンディアン) に変換する関数です。この場合、(AndreyT に感謝します!)のword
at offset 0 はビッグ エンディアンで a を返すため、ntop 開発者は指定された値 (この場合、フローがApple Filing Protocol) は、ネットワーク スタックのビッグ エンディアンに対してリトル エンディアンです。packet->payload
word
htons()
[もっと]
いくつかの質問を、あいまいな質問をしやすいフォーラムに移動して、将来同様の状況に対処する人々に役立つ可能性のある技術を理解してもらいました。