Reading Little Endian – LS Byte first for integer 如何忽略多余的 0

Reading Little Endian – LS Byte first for integer how to ignore the extra 0

我一直在从流中逐字节读取这些内容。例子我这样读这一行。

int payloadLength = r.readUnsignedShort();

我遇到的问题是 2 个字节的值是 x3100 所以结果是 12544 但我想只读为 x31 这使得它只有 49 .如何忽略多余的00。

将值右移8位,然后加上0xFF。右移将位向右移动 8 位。任何其他位也会向右移动,因此您需要通过使用 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。但我认为这是一个很好的做法,可以防止将来可能出现的问题。