Java 字节缓冲区将三个字节转换为 int



我目前正在处理一些小端二进制数据,我已经到达了一个尴尬的地步,我需要将奇数字节转换为整数值。

现在使用 ByteBuffer 类,我能够使用 getInt() getLong() 函数完美地读取整数和长整型,它们分别读取 4 个和 8 个字节。

但是,在这个例子中,我需要读取三个字节并从中做一个整数。 我试过做getShort + get()(2 字节 + 1 字节),但我认为这不是正确的方法。

我猜我需要将字节位移在一起才能获得正确的 int 值,但我总是对位移感到困惑。

我也认为字节缓冲类会提供一个读取奇数字节的函数,但似乎不是。

一种方法是创建一个长度为三个字节的 byte[],将三个字节放入其中,然后在它周围包装一个字节缓冲区,并从中读取一个 int。 但这似乎是很多额外的代码。

任何建议或意见将不胜感激。

谢谢

通过以下方式获取三个字节

byte[] tmp = new byte[3];
byteBuffer.get(tmp);

然后通过以下方式转换为int

int i = tmp[0] << 16 | tmp[1] << 8 | tmp[2];

int i = tmp[2] << 16 | tmp[1] << 8 | tmp[0];

取决于你的恩典。

来自Java语言规范:

原始。。。字节。。。值为 8 位 ...有符号二进制补码整数。

要将字节转换为"无符号"字节,请使用 255。因此,该函数将是:

private static int toInt( byte[] b )
{
    return (b[0] & 255) << 16 | (b[1] & 255) << 8 | (b[2] & 255);
}

private static int toInt( byte[] b )
{
    return (b[2] & 255) << 16 | (b[1] & 255) << 8 | (b[0] & 255);
}

取决于你的恩典。

相关内容

  • 没有找到相关文章

最新更新