好的,所以我搜索并搜索过,没有任何效果...... 我有这个int数组,每个int只占用低位字节。例如,我有
data[0] = Ox52
data[1] = Oxe4
data[2] = Ox18
data[3] = Oxcb
我希望标准输出包含那些字节(换句话说,如果我在文件中写这个并且我用Hex编辑器检查文件,我应该看到):
52e418cb
我该怎么做?
感谢您的帮助
答案 0 :(得分:1)
这样做的正确方法是根据所需位置移动字节,然后使用OR运算符将它们拼接在一起。但是,在移位之前,还应该在字节的低8位执行位掩码。这是必需的,因为首先将字节转换为int(在移位完成之前)。这没什么大不了的,但是当最高位为1时(即:字节为负),您的整数也将变为负数,这会导致所有前导位都设置为1。
所以:
(byte) 10000000 = (int) 11111111 11111111 11111111 10000000
将此负int值与OR运算符一起使用将导致错误的结果。所以,工作线就是这个:
((data[0] & 0xFF) << 24) | ((data[1] & 0xFF) << 16) | ((data[2] & 0xFF) << 8) | (data[3] & 0xFF)
答案 1 :(得分:0)
在将它们写入文件/输出之前,只需将它们移位并将它们组合在一起:
(data[0] << 24) | (data[1] << 16) | (data[2] << 8) | data[3]
答案 2 :(得分:0)
以下似乎工作正常。我正在使用OutputStream.write(int)
方法。
int[] ints = new int[] { 0x52, 0xe4, 0x18, 0xcb };
FileOutputStream os = new FileOutputStream(new File("/tmp/x"));
for (int i : ints) {
os.write(i);
}
os.close();
结果:
> hexdump /tmp/x
0000000 52 e4 18 cb