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