Conjunto de bytes de clarificación de fragmentos al número de puerto
Pregunta
Tengo una matriz de bytes que contiene 6 bytes. Los últimos 2 representan el número de puerto mientras busco una forma en que dos conviertan estos últimos a bytes en un número de puerto que he encontrado con este fragmento.
int port = 0;
port |= peerList[i+4] & 0xFF;
port <<= 8;
port |= peerList[i+5] & 0xFF;
¿funciona pero necesito alguna aclaración sobre cómo funciona?
Solución
======================= | byte 5 | byte 6 | |----------|----------| | 01010101 | 01010101 | =======================
Básicamente, toma el byte n. ° 5, el desplazamiento es de 8 bits a la izquierda, lo que da como resultado 0101010100000000
y luego usa el bit a bit u operador para colocar el byte 6 en lugar de ceros.
Otros consejos
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.
El código simplemente toma los últimos 2 bytes de la matriz y los usa como un número big-endian.
Generalmente, en los paquetes de red, el número de puerto se transfiere en big-endian (lo que significa que el byte con la dirección más baja es más significativo).
El código toma el número de byte i + 4 y lo usa como MSB y el byte i + 5 como LSB del número de puerto.