私は6バイトを含むバイト配列を持っており、最後の2つはポート番号を表し、2つはこれらをバイトに変換してポート番号に変換する方法を探しています。
int port = 0;
port |= peerList[i+4] & 0xFF;
port <<= 8;
port |= peerList[i+5] & 0xFF;
それは機能しますが、どのように機能するかについて明確にする必要がありますか?
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.
======================= | byte 5 | byte 6 | |----------|----------| | 01010101 | 01010101 | =======================
基本的に、バイト #5 を0101010100000000
使用し、シフトは左に 8 ビットであり、ビットごとの or 演算子を使用してバイト 6 をゼロの場所に置きます。
このコードは、配列から最後の 2 バイトを取得し、それらをビッグ エンディアンの数値として使用するだけです。
通常、ネットワーク パケットでは、ポート番号はビッグ エンディアンで転送されます (つまり、下位アドレスのバイトがより重要になります)。
コードはバイト番号 i+4 を取り、それをポート番号の MSB として使用し、バイト i+5 を LSB として使用します。