与c相比,java中的位操作

时间:2013-02-27 11:49:23

标签: java c++ bitwise-operators

我正在尝试在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];

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

1 个答案:

答案 0 :(得分:1)

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

如果要在Java中获得相同的结果,则必须交换高字节和低字节

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

现在,您将在Java或C ++中使用相同的位。

两个代码段之间的另一个区别是使用的类型。 Java代码中有32位整数,C ++中有16位无符号整数和8位字符。这与此无关,但在比较不同的代码片段时必须牢记这一点。