Фрагмент байтового массива с указанием номера порта

StackOverflow https://stackoverflow.com/questions/1021463

  •  06-07-2019
  •  | 
  •  

Вопрос

У меня есть байтовый массив, который содержит 6 байтов. Последние 2 представляют номер порта при поиске способа, которым два последних преобразуют эти байты в номер порта, который я нашел в этом фрагменте,



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

это работает, но мне нужно уточнить, как это работает?

Это было полезно?

Решение

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

По сути, он занимает байт № 5, сдвиг на 8 бит влево приводит к 0101010100000000 , а затем использует побитовый оператор или оператор для помещения байта 6 вместо нулей.

Другие советы

    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.

Код просто берет последние 2 байта из массива и использует их как число с прямым порядком байтов.

Обычно в сетевых пакетах номер порта передается с прямым порядком байтов (это означает, что байт с более низким адресом является более значимым).

Код принимает номер байта i + 4 и использует его в качестве MSB, а байт i + 5 - в качестве LSB номера порта.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top