質問
最後の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として使用します。
所属していません StackOverflow