1

私は6バイトを含むバイト配列を持っており、最後の2つはポート番号を表し、2つはこれらをバイトに変換してポート番号に変換する方法を探しています。



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

それは機能しますが、どのように機能するかについて明確にする必要がありますか?

4

3 に答える 3

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.
于 2009-06-20T11:42:32.707 に答える
1
  =======================
  |  byte 5  |  byte 6  |
  |----------|----------|
  | 01010101 | 01010101 |
  =======================

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

于 2009-06-20T11:42:54.483 に答える
0

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

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

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

于 2009-06-20T11:41:03.583 に答える