Snippet Chiarimento array di byte al numero di porta
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?
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.