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。但我认为这是一个很好的做法,可以防止将来可能出现的问题。
我一直在从流中逐字节读取这些内容。例子我这样读这一行。
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。但我认为这是一个很好的做法,可以防止将来可能出现的问题。