Pergunta

Eu tenho uma matriz de bytes que contém 6 bytes última 2 representa o número da porta enquanto procura uma maneira de dois converter estes últimos a bytes para um número de porta i já se deparou com esse trecho,



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

ele funciona, mas eu preciso de alguns esclarecimentos sobre a forma como ele funciona?

Foi útil?

Solução

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

Basicamente, leva byte # 5, deslocamento é de 8 bits para a esquerda resultando na 0101010100000000 e então usa o bit a bit ou operador para colocar o byte 6 no lugar de zeros.

Outras dicas

    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.

O código simplesmente toma os últimos 2 bytes do array e os usa como um número big-endian.

Normalmente, em pacotes de rede o número da porta é transferido em grande-endian (ou seja, o byte com o endereço mais baixo é mais significativo).

O código leva número de byte i + 4 e usa-o como o MSB e byte i + 5 como o bit menos significativo do número de porta.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top