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 }