我正在尝试在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];
这两个代码产生不同的结果。 知道为什么吗?
答案 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位字符。这与此无关,但在比较不同的代码片段时必须牢记这一点。