Java和C+中的整数到字节+; 在我的C++代码中,我需要转换一个 int >代码,并将其放入一个字节中。我使用char表示一个字节。 在我的java代码中,我应该阅读这个byte(它通过网络发送),并且我应该从这个字节(我发送的那个字节)中获得适当的int

Java和C+中的整数到字节+; 在我的C++代码中,我需要转换一个 int >代码,并将其放入一个字节中。我使用char表示一个字节。 在我的java代码中,我应该阅读这个byte(它通过网络发送),并且我应该从这个字节(我发送的那个字节)中获得适当的int,java,c++,Java,C++,我应该提到这个字节小于15,所以一个字节就足够了 然而,Java代码在一些尝试中读取负数,当我尝试其他方法时,它给出了完全不同的数字。我怀疑这是一个大/小endian的问题 我所尝试的: // C++ char bytes[255]; bytes[0] = myInt; // attempt 1 bytes[0] = myInt & 0xFF; // attempt 2 // ... send the byte array over the network // JAVA // rec

我应该提到这个字节小于15,所以一个字节就足够了

然而,Java代码在一些尝试中读取负数,当我尝试其他方法时,它给出了完全不同的数字。我怀疑这是一个大/小endian的问题

我所尝试的:

// 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机器上运行,我应该如何正确地做到这一点呢?

进一步编辑:
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);
}
编辑(在上面的评论之后):
7=0000 0111和-32=1110 0000(=224作为int)
问题似乎是某种镜像翻转


170=1010 1010(=86作为Java字节)
这对我来说没有意义,因为3位是如何变成4并展开的。

进一步编辑:
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);
}
编辑(在上面的评论之后):
7=0000 0111和-32=1110 0000(=224作为int)
问题似乎是某种镜像翻转

170=1010 1010(-86作为Java字节)
这对我来说没有意义,因为3位如何变成4位并展开。

注意:这从来不是endian问题。只有在低级别工作或创建自己的字节数组来表示一个数字时,这可能是endian问题

现在只有一个字节,所以没有endian问题

尝试使用unsigned int。

注意:这从来不是endian问题。只有在低级别工作或创建自己的字节数组来表示一个数字时,这可能是endian问题

现在只有一个字节,所以没有endian问题



尝试使用unsigned int。

听起来可能是endian问题。如果您正在写入和读取的内容的长度只有一个字节,那么它就不是endian问题。如果值肯定小于15,那么我想尝试一个应该工作,尝试2会进入EnDad问题。你的调试器说的是字节[] -因为否则我们能做的最好的推测是?使用TimeTP1,我在C++<代码>字节[0 ]=7 < /C>中,我用java来打印我使用Java C++获得的int(Realint=Byth[4]);代码>它打印的是
readInt=-32
我想最明显的问题是“通过网络发送字节数组”在做什么。从7得到-32甚至一点都不正确。我认为您的网络代码有问题。听起来可能是endian问题。如果您正在写入和读取的内容的长度只有一个字节,则不是endian问题。如果值肯定小于15,那么我想尝试一个应该工作,尝试2会进入EnDad问题。你的调试器说的是字节[] -因为否则我们能做的最好的推测是?使用TimeTP1,我在C++<代码>字节[0 ]=7 < /C>中,我用java来打印我使用Java C++获得的int(Realint=Byth[4]);代码>它打印的是
readInt=-32
我想最明显的问题是“通过网络发送字节数组”在做什么。从7得到-32甚至一点都不正确。我认为您的网络代码有问题。您是否在Java中看到unsigned int。。。?我看不出你的答案对OP有什么帮助……我仍然不能发表评论,而另一个答案中关于endianness的评论可能会导致错误。我知道这不是一个答案,但不能在其他地方写,对不起。你可以在任何地方发表评论。这项特权需要50点声誉,而你只有76点声誉。请记住,如果您继续发布这样的答案,您可能会失去此权限…您是否在Java中看到了unsigned int。。。?我看不出你的答案对OP有什么帮助……我仍然不能发表评论,而另一个答案中关于endianness的评论可能会导致错误。我知道这不是一个答案,但不能在其他地方写,对不起。你可以在任何地方发表评论。这项特权需要50点声誉,而你只有76点声誉。记住,如果你一直这样发布你可能会失去这个特权…这给了我<代码> RealTime= 170 ,而我在C++边放了<代码> 7代码>,这给了我<代码> RealtIn=170 < /C>,而我在C++端放了<代码> 7 < /C>