gpt4 book ai didi

java - java中的位操作,与c相比

转载 作者:太空宇宙 更新时间:2023-11-04 11:58:33 25 4
gpt4 key购买 nike

我正在尝试用 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 位字符。这在这里无关紧要,但在比较不同的代码片段时必须牢记。

关于java - java中的位操作,与c相比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15111377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com