2013-02-27 38 views
1

我想转换java中的C++软件,但是位操作不会产生相同的结果。 我在做什么的概述: 有一个数据条目,2个字节长,无符号(0-65535)的ascii文件。现在我想转换两个单字节无符号短整数的双字节无符号整数。在java中的位操作,相比于c

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]; 

这两个码产生不同的结果。 有什么想法为什么?

+2

'C++!= java' !!! – Apurv 2013-02-27 11:51:20

+0

http://stackoverflow.com/questions/11760676/how-to-access-array-elements-by-pointer-arithmetic-in-java – BobTheBuilder 2013-02-27 11:51:28

回答

1

这可能取决于系统的永久性。如果它是一个小端系统,C++代码在ACCBUF[0]中有较低的字节。 Java代码在ACCBUF[0]中有高字节,无论使用什么硬件。

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

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

现在你将不得不在Java或C++相同的位。

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

+0

实际上,我尝试将C++代码转换为java而不是其他方式。 – user2092895 2013-02-27 12:11:58

+0

@ user2092895对不起,我的错。请参阅最新的答案。 – 2013-02-27 12:26:05

+0

这实际上是我需要的提示。谢谢! – user2092895 2013-02-27 12:39:20