Domanda

Ho un array di byte che contiene 6 byte, l'ultimo 2 rappresenta il numero di porta durante la ricerca di un modo in cui due convertono questi ultimi in byte in un numero di porta. Ho trovato questo frammento,



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

funziona ma ho bisogno di alcuni chiarimenti su come funziona?

È stato utile?

Soluzione

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

Fondamentalmente, ci vuole il byte n. 5, lo spostamento è di 8 bit a sinistra risultante in 0101010100000000 e quindi utilizza bitwise o operatore per mettere il byte 6 al posto degli zeri.

Altri suggerimenti

    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.

Il codice prende semplicemente gli ultimi 2 byte dall'array e li usa come un numero big-endian.

Di solito nei pacchetti di rete il numero di porta viene trasferito in big-endian (il che significa che il byte con l'indirizzo inferiore è più significativo).

Il codice accetta il numero di byte i + 4 e lo utilizza come MSB e byte i + 5 come LSB del numero di porta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top