Java 字节数组到int获取奇怪的int结果
我知道这里有很多类似的问题,但我有一些奇怪的情况。我要做的是将Java 字节数组到int获取奇怪的int结果,java,arrays,byte,Java,Arrays,Byte,我知道这里有很多类似的问题,但我有一些奇怪的情况。我要做的是将字节[4]转换为int 以下是从int到byte的转换: int data24bit = 51; for (int i = 0; i < 3; i++) { data8bit = (byte)(data24bit & 0x0000FF); data24bit = data24bit >> 8; byte_file.put(data8bit); } 或 我总是得到855638016,
字节[4]
转换为int
以下是从int到byte的转换:
int data24bit = 51;
for (int i = 0; i < 3; i++) {
data8bit = (byte)(data24bit & 0x0000FF);
data24bit = data24bit >> 8;
byte_file.put(data8bit);
}
或
我总是得到855638016
,结果是51
当我调试代码并查看字节数组时,我可以看到以下内容:[51,0,0,0]
我做错了什么?好吧,够蠢的了,但我只是没有保留字节顺序
[51, 0, 0, 0] -> is 855638016
[0, 0, 0, 51] -> is 51
问题是,您正在以小尾数(首先是最低有效字节)写入字节,但将其读回时假定为大尾数 写出后,字节数组如下所示:
[51, 0, 0, 0]
然后您尝试将其转换回整数,如您的帖子中的示例所示:
value = ((0xFF & bytes[0]) << 24)
| ((0xFF & bytes[1]) << 16)
| ((0xFF & bytes[2]) << 8)
| (0xFF & bytes[3]);
而你真正想要的是:
value = 0 * 256 * 256 * 256
+ 0 * 256 * 256
+ 0 * 256
+ 51
= 51
因此,固定计算如下:
value = ((0xFF & bytes[3]) << 24)
| ((0xFF & bytes[2]) << 16)
| ((0xFF & bytes[1]) << 8)
| (0xFF & bytes[0]);
value=((0xFF&bytes[3])”for(inti=0;i<3;i++)你是否有意不处理第四个字节?是的,因为转换代码只使用前3个字节。我的意思是它不是来自我。是的,thx,我已经发现了这个问题。我也发布了自己的答案。
[51, 0, 0, 0]
value = ((0xFF & bytes[0]) << 24)
| ((0xFF & bytes[1]) << 16)
| ((0xFF & bytes[2]) << 8)
| (0xFF & bytes[3]);
value = 51 * 256 * 256 * 256
+ 0 * 256 * 256
+ 0 * 256
+ 0
= 855638016
value = 0 * 256 * 256 * 256
+ 0 * 256 * 256
+ 0 * 256
+ 51
= 51
value = ((0xFF & bytes[3]) << 24)
| ((0xFF & bytes[2]) << 16)
| ((0xFF & bytes[1]) << 8)
| (0xFF & bytes[0]);