2009-06-20 11 views
1

6バイトのバイト配列を持っています。最後の2はポート番号を表しています。これらの最後のバイトをポート番号に変換します。Snippetバイト配列をポート番号に変換



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

それは動作しますが、どのように動作するかについての明確化が必要ですか?

答えて

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

基本的には、シフト0101010100000000もたらす左に8ビット、バイト#5を取得し、その後、ゼロの代わりにバイト6を入れてビット単位のOR演算子を使用します。

+0

ザ・&0xFFでは、元のバイトはそれが1 –

+0

@ジョンとしてトップビットのしている場合は負であることに起因するint型を維持するために必要とされている:ありがとう。 Javaタグに気付かなかった。 –

0

コードは単純に配列から最後の2バイトを取り出し、ビッグエンディアン番号として使用します。

通常、ネットワークパケットでは、ポート番号はビッグエンディアンで転送されます(下位アドレスのバイトがより重要であることを意味します)。

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

3
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. 
関連する問題