Чтение Little Endian - LS Byte сначала для целого числа, как игнорировать лишние 0 - PullRequest
0 голосов
/ 18 февраля 2020

Я читал эти байты из потоков. Пример Я читаю эту строку следующим образом.

int payloadLength = r.readUnsignedShort();

Проблема, с которой я столкнулся, состоит в том, что значение в 2 байта равно x3100, поэтому получается 12544, но я полагаю, что читается только как x31, что делает его быть только 49. Как игнорировать лишние 00.

1 Ответ

1 голос
/ 18 февраля 2020

Сдвиньте вправо значение на 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. Но я думаю, что это хорошая практика, которая предотвратит возможные проблемы в будущем.

...