Java 使用位操作将字节[]变为长

Java 使用位操作将字节[]变为长,java,byte,bit-manipulation,long-integer,Java,Byte,Bit Manipulation,Long Integer,我有一个byte[],它将字节保持在一个很长的长度。我想使用位操作将其转换为长的。我尝试了以下方法: byte[] b = new byte[]{127, 127}; long result = 0; for (int i = 0; i < b.length; i++) { result <<= 8; // this is the same as l = l << 8; result |= (short)b[i] & 0xFF; } byt

我有一个
byte[]
,它将字节保持在一个很长的长度。我想使用位操作将其转换为长的。我尝试了以下方法:

byte[] b = new byte[]{127, 127};
long result = 0;
for (int i = 0; i < b.length; i++) {
    result <<= 8; // this is the same as l = l << 8;
    result |= (short)b[i] & 0xFF;
}
byte[]b=新字节[]{127127};
长结果=0;
for(int i=0;i结果这取决于您的应用程序需要什么

byte[] b = new byte[] { -1, 2 }
另一种看待这一点的方式是十六进制数0xFF02。这表示有符号的64位值(65282)?或有符号的16位值(-254)?或无符号的16位值(再次是65282)?或无符号的64位值(仍然是65282)


您的代码将其视为有符号64位值。
biginger
将其视为有符号16位值。
biginger
有另一个构造函数将字节数组视为大小,并使用另一个符号参数:
new biginger(+1,b)
将产生65282。

你不能用
字节缓冲区来代替吗?a
是8字节,而不是2字节。如果你将一个负字节左移56位,那么产生的
将是负的。你在测试中看不到它,因为你只左移了8位。你真的想如何处理字节?在这篇文章中ituation我希望它们被当作8位无符号整数处理,在这种情况下,65282对我来说是有意义的…你完全正确。我只使用了两个字节进行测试,但如果我使用8个字节,它就可以工作。对于我来说,非常愚蠢的时刻:P。对于一个小的endian表示,它也可能是767。
byte[] b = new byte[] { -1, 2 }