6バイトのバイト配列を持っています。最後の2はポート番号を表しています。これらの最後のバイトをポート番号に変換します。Snippetバイト配列をポート番号に変換
int port = 0;
port |= peerList[i+4] & 0xFF;
port <<= 8;
port |= peerList[i+5] & 0xFF;
それは動作しますが、どのように動作するかについての明確化が必要ですか?
6バイトのバイト配列を持っています。最後の2はポート番号を表しています。これらの最後のバイトをポート番号に変換します。Snippetバイト配列をポート番号に変換
int port = 0;
port |= peerList[i+4] & 0xFF;
port <<= 8;
port |= peerList[i+5] & 0xFF;
それは動作しますが、どのように動作するかについての明確化が必要ですか?
======================= | byte 5 | byte 6 | |----------|----------| | 01010101 | 01010101 | =======================
基本的には、シフト0101010100000000
もたらす左に8ビット、バイト#5を取得し、その後、ゼロの代わりにバイト6を入れてビット単位のOR演算子を使用します。
コードは単純に配列から最後の2バイトを取り出し、ビッグエンディアン番号として使用します。
通常、ネットワークパケットでは、ポート番号はビッグエンディアンで転送されます(下位アドレスのバイトがより重要であることを意味します)。
コードは、バイト番号i + 4をとり、LSBポート番号としてMSBとバイトとしてI + 5にそれを使用します。
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.
ザ・&0xFFでは、元のバイトはそれが1 –
@ジョンとしてトップビットのしている場合は負であることに起因するint型を維持するために必要とされている:ありがとう。 Javaタグに気付かなかった。 –