Сдвиньте вправо значение на 8 бит, а затем и это с 0xFF. Сдвиг вправо перемещает биты на 8 бит вправо. Любые другие биты также будут перемещены вправо, поэтому вам необходимо замаскировать их, выполнив ANDing (&
) с 0xFF, чтобы избавиться от них.
int payloadLength = r.readUnsignedShort();
payloadLength = (payloadLength >>> 8)& 0xFF;
System.out.println(payLoadLength);
Вы также можете поменять местами два байта.
v = 0xa0b;
v = swapBytes(v);
System.out.println(Integer.toHexString(v)); // 0xb0a
public static int swapBytes(int v) {
return ((v << 8)&0xFF00) | ((v >> 8) & 0xFF);
}
Обычно для считывания всего в 16 битов это не требуется, и это с 0xFF
, поскольку старшие биты равны 0. Но я думаю, что это хорошая практика, которая предотвратит возможные проблемы в будущем.