Frage

Ich habe einen Byte-Array, die 6 Bytes letzte 2 stellt die Portnummer enthält, während nach einer Möglichkeit, diese letzten zwei Bytes auf, um eine Anschlussnummer zu konvertieren Benutzer i über diesen Schnipsel gekommen bin,



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

es funktioniert, aber ich brauche eine Klarstellung, wie es funktioniert?

War es hilfreich?

Lösung

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

Grundsätzlich es dauert Byte # 5, Verschiebung 8 Bits nach links in 0101010100000000 resultierenden und verwendet dann den bitweise oder Bediener das Byte 6 an der Stelle von Nullen zu setzen.

Andere Tipps

    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.

Der Code nimmt einfach die letzten zwei Bytes aus dem Array und verwendet sie als Big-Endian-Nr.

In der Regel in Netzwerkpaketen die Portnummer in Big-Endian übertragen wird (das Byte mit der niedrigeren Adresse Bedeutung ist signifikant).

Der Code nimmt Byte-Zahl i + 4 und verwendet sie als MSB und Byte i + 5 als LSB der Portnummer.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top