1

ネットワーク プログラミングのメッセージ フレーミングについて簡単な質問があります。

MAGIC フラグと対応するビットマスクを定義してそれを取得する実装をよく目にします。

ヘッダーには、論理 OR でビットを反転させて、他のメッセージ関連情報を含めることができます。

さまざまな実装では、(header & MASK) == MAGIC を使用してマジック フラグをチェックします。

これらの懸念を分離することの利点は何ですか?

次のようにすることもできます: (header & MAGIC) == MAGIC.

4

1 に答える 1

2

簡単な例:

MASK   = 0x000F
MAGIC  = 0x0001
header = 0x0005

次に(header & MASK) == MAGIC、MASK に設定されているすべてのビット (ここでは下位 4 ビット) がMAGIC の対応するビットと同じ値を持っているかどうかを確認します。これは、例のヘッダーには当てはまりません。

一方、(header & MAGIC) == MAGICMAGIC に設定されているすべてのビットがヘッダーにも設定されているかどうかのみをチェックします。これは、この例では当てはまります。

あなたの例でheader = 0xFFFFは、 test に合格しますが、 test(header & MAGIC) == MAGICには合格しません(header & MASK) == MAGIC

もちろん MASK == MAGIC であれば違いはありません。

于 2013-08-02T21:25:51.127 に答える