与c相比,java中的位操作

bit operations in java, compared to c

本文关键字:位操作 java 相比      更新时间:2023-10-16

我正在尝试转换java中的c++软件,但是位操作不会产生相同的结果。我正在做的概述:有一个包含数据条目的ASCII文件,2字节长,无符号(0-65535)。现在我想把两字节的无符号整型转换成两个一字节的无符号短整型。

c++代码:

signed char * pINT8;
signed char ACCBuf[3];
UInt16 tempBuf[128];

tempBuf[0] = Convert::ToUInt16(line);
pINT8 = (signed char *)&tempBuf[0];
ACCBuf[0] = *pINT8;
pINT8++;
ACCBuf[1] = *pINT8;
Java代码:

int[] ACCBuf = new int[6];
int[] tempBuf = new int[128];
tempBuf[0] = Integer.parseInt(line);
ACCBuf[0] = tempBuf[0] >> 8;
ACCBuf[1] = 0x00FF & tempBuf[0];

这两个代码产生不同的结果。知道为什么吗?

这可能取决于系统的端序。c++代码在ACCBUF[0]中有较低的字节,如果它是一个小的端序系统。无论硬件是什么,Java代码的上字节都在ACCBUF[0]中。

如果你想在Java中得到相同的结果,你必须交换高低字节

ACCBuf[0] = 0x00FF & tempBuf[0];
ACCBuf[1] = tempBuf[0] >> 8;

现在无论在Java还是c++中,你都会得到相同的位。

这两个代码片段的另一个区别是使用的类型。Java代码中有32位整型,c++代码中有16位无符号整型和8位char。这与这里无关,但在比较不同的代码片段时必须记住。