gpt4 book ai didi

java - 读取 Little Endian – LS 字节首先用于整数如何忽略额外的 0

转载 作者:行者123 更新时间:2023-12-02 08:59:20 24 4
gpt4 key购买 nike

我一直在从流中逐字节读取这些数据。示例我这样读这一行。

int payloadLength = r.readUnsignedShort();

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

最佳答案

将值右移 8 位,然后加上 0xFF。右移将位向右移动 8 位。任何其他位也会移至右侧,因此您需要通过与 0xFF 进行 AND 运算 (&) 来屏蔽这些位以消除它们。


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。但我认为这是一个很好的做法,可以防止将来可能出现的问题。

关于java - 读取 Little Endian – LS 字节首先用于整数如何忽略额外的 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60283507/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com