繁体   English   中英

Java bytebuffer将三个字节转换为int

[英]Java bytebuffer convert three bytes to int

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

现在使用ByteBuffer类,我能够使用getInt() getLong()函数读取整数并完全正确,它们分别读取4和8个字节。

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

我猜我需要将字节位移位以获得正确的int值,但我总是对位移有点困惑。

另外我还以为bytebuffer类会提供一个读取奇数个字节的函数,但似乎没有。

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

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

谢谢

通过获取三个字节

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

然后转换为int via

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

要么

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

取决于你的endianess。

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);
}

取决于你的endianess。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM