Schnipsel Klärung Byte-Array-Portnummer
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?
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.