質問

最後の2バイトがポート番号を表す6バイトを含むバイト配列があり、最後の2バイトをこのスニペットに遭遇したポート番号にバイトに変換する方法を検索しています



            int port = 0;
        port |= peerList[i+4] & 0xFF;
        port <<= 8;
        port |= peerList[i+5] & 0xFF;

動作しますが、動作方法について明確にする必要がありますか?

役に立ちましたか?

解決

  =======================
  |  byte 5  |  byte 6  |
  |----------|----------|
  | 01010101 | 01010101 |
  =======================

基本的には、バイト#5を取り、シフトは左に8ビットで 0101010100000000 になります。次に、ビット単位のor演算子を使用して、バイト6をゼロの場所に置きます。

他のヒント

    int port = 0;                       // Start with zero
    port |= peerList[i+4] & 0xFF;       // Assign first byte to port using bitwise or.
    port <<= 8;                         // Shift the bits left by 8 (so the byte from before is on the correct position)
    port |= peerList[i+5] & 0xFF;       // Assign the second, LSB, byte to port.

コードは、配列から最後の2バイトを取得し、ビッグエンディアンの数値として使用します。

通常、ネットワークパケットでは、ポート番号はビッグエンディアンで転送されます(つまり、アドレスが小さいバイトほど重要です)。

コードはバイト番号i + 4を受け取り、それをMSBとして使用し、バイトi + 5をポート番号のLSBとして使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top