1

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

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

4

1 回答 1

1

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

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

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

现在您将在 Java 或 C++ 中拥有相同的位。

Another difference between the two code snippets are the types used. You have 32 bit ints in the Java code and 16 bit unsigned ints respectively 8 bit chars in C++. This isn't relevant here, but must be kept in mind, when comparing different code snippets.

于 2013-02-27T11:55:07.160 回答