我正在为我无法控制的特定文件格式编写文件保存和加载函数,并且格式指定在特定字节位置我必须写入 4 个字节的数据来表示 32 位无符号值......在我的测试文件中这个值是 16052,或 0x00003EB4... 所以我将数据写入字节数组,以这种方式保存:
data[index] = 0xB4;
data[index+1] = 0x3E;
data[index+2] = 0x00;
data[index+3] = 0x00;
您可以看到数据是 little-endian 格式,这是正确的......问题是当我尝试使用我的文件加载函数加载这些数据时,java 会看到这样的数据:
-76, 62, 0, 0
0xB4 值被解释为 -76,因为字节是在 java 中签名的...当我尝试使用以下代码将这 4 个字节重新组合为单个 32 位值时,值最终为 -76...
value = data[index+3];
value <<= 8;
value |= data[index+2];
value <<= 8;
value |= data[index+1];
value <<= 8;
value |= data[index];
这应该执行以下操作:将值设置为 0x00(高位字节),左移 8 位,或 0x00 到低 8 位,左移 8 位,或 0x3E 到低 8 位,左移 8 位,或0xB4(低位字节)到低 8 位。
这应该会产生值 0x00003EB4 ......这是我开始的......但是由于某种原因,我无法弄清楚它在该操作之后给了我 -76 的值。
我确信这是由于 java 将 0xB4 字节解释为值 -76 搞砸了按位或运算...
我的问题是我必须做些什么来解决这个问题?
谢谢你。