1

tcpソケットでデータイベントをリッスンしています。

各データイベントは、プロトコルのフレームであるバッファを提供します。最初のバイトはヘッダーとして機能し、アクセスしたいビットフラグがいくつか含まれています。

データイベントをリッスンして最初のバイトを取得するまでは、次のようになります。

socket.on('data', function(buff) {
    console.log(buff[0]); // returns 129
});

最初のビットをチェックしたい場合は、129をビット形式に変換してから、最初の数値をチェックする必要があります。

129 => 1000 0001
       |

ご存知のとおり、JavaScriptはバイナリをサポートしていません。

ノードバッファオブジェクトでビット単位で作業できるかどうか疑問に思っています。そうであれば、これはどのようになりますか?

よろしく

4

1 に答える 1

4

&フラグのチェックは、演算子を使用して行うことができます。

最初のビットを含むフラグの場合:

1000 0001      129
1000 0000      128
--------- &
1000 0000      128

最初のビットを含まないフラグの場合:

0101 0001      81
1000 0000      128
--------- &
0000 0000      0

したがって、結果はフラグ (フラグが設定されている場合) またはゼロ (フラグが設定されていない場合) のいずれかになります。したがって、関数を作成できます (ここflagで、 は 2 のべき乗です)。

var containsFlag = function(number, flag) {
  return (number & flag) === flag;
};

containsFlag(129, 128);  // true
containsFlag(81, 128);   // false
于 2013-01-06T12:31:46.297 に答える