在我的C ++代码中,我需要转换int
并将其放在一个字节内。我使用char
表示一个字节。
在我的java代码中,我应该阅读这个byte
(它是通过网络发送的),我应该从该字节(我发送的那个)获得适当的int
。
我应该提到这个字节小于15,所以一个字节就足够了
但是,Java代码在某些尝试中读取负数,当我尝试其他方式时,它给了我完全不同的数字。我怀疑这是一个大/小端的问题。
我尝试过的事情:
// C++
char bytes[255];
bytes[0] = myInt; // attempt 1
bytes[0] = myInt & 0xFF; // attempt 2
// ... send the byte array over the network
// JAVA
// receive the byte
int readInt = bytes[0]; //attempt 1
int readInt = bytes[0] & 0xFF; // attempt2
考虑到两个应用程序(C ++端和JAVA端)将在同一个ubuntu机器上运行,我应该如何正确地执行此操作?
答案 0 :(得分:1)
进一步编辑:int readInt = bytes[0] & 0xFF
应该有用。
for (int i = 0; i < 256; i++) {
byte b = (byte) i;
int j = b & 0xFF;
System.out.println("The byte is " + b + " and the int is " + j);
}
给出:
The byte is 0 and the int is 0
The byte is 1 and the int is 1
...
The byte is 126 and the int is 126
The byte is 127 and the int is 127
The byte is -128 and the int is 128
The byte is -127 and the int is 129
...
The byte is -2 and the int is 254
The byte is -1 and the int is 255
编辑(在上面的评论之后):7 = 0000 0111 and -32 = 1110 0000 (= 224 as int)
问题似乎是某种镜像翻转。
和170 = 1010 1010 (= -86 as Java byte)
这对我没有意义,因为3位变成了4并散布出来。
答案 1 :(得分:1)
注意:从不是一个字节序问题。只有当您使用低级别或使用自己的字节数组来表示一个数字时,它才可能是一个字节序问题。
现在只有一个字节,所以没有字节序问题。
尝试使用unsigned int。