gpt4 book ai didi

java - 如何在 Java 中将字节数组转换为长整数?

转载 作者:搜寻专家 更新时间:2023-10-31 08:07:10 25 4
gpt4 key购买 nike

我正在从硬件设备读取 8 个字节的数据。我需要将它们转换成数值。我想我想将它们转换为适合 8 个字节的 long。我对 Java 和低级数据类型操作不是很熟悉。我似乎有两个问题(除了几乎没有相关硬件文档这一事实),字节预计是无符号的,所以我不能直接进行整数转换。我不确定它们是什么字节顺序。

如有任何建议,我们将不胜感激。


最后是这样的(取自一些我可能应该在一周前阅读的源代码):

public static final long toLong (byte[] byteArray, int offset, int len)
{
long val = 0;
len = Math.min(len, 8);
for (int i = (len - 1); i >= 0; i--)
{
val <<= 8;
val |= (byteArray [offset + i] & 0x00FF);
}
return val;
}

最佳答案

根据数据的字节顺序移动字节非常简单。但是,long 数据类型有一个小技巧,因为对 int 或更小的整数类型进行二元运算会将操作数提升为 int。对于大于 31 位的左移,这将导致零,因为所有位都已移出 int 范围。

因此,通过在计算中包含一个 long 操作数来强制提升到 long。下面,我通过用值 0xFFL 屏蔽每个字节来实现这一点,这是一个 long,强制结果为 long

byte[] buf = new byte[8];
/* Fill buf somehow... */
long l = ((buf[0] & 0xFFL) << 56) |
((buf[1] & 0xFFL) << 48) |
((buf[2] & 0xFFL) << 40) |
((buf[3] & 0xFFL) << 32) |
((buf[4] & 0xFFL) << 24) |
((buf[5] & 0xFFL) << 16) |
((buf[6] & 0xFFL) << 8) |
((buf[7] & 0xFFL) << 0) ;

关于java - 如何在 Java 中将字节数组转换为长整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1586882/

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