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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top