gpt4 book ai didi

java - 通过socket从objective-c发送一个int到java,但是java端的值改变了

转载 作者:行者123 更新时间:2023-12-02 00:43:16 24 4
gpt4 key购买 nike

我在 NSData 中发送一个 int,如下所示:

 NSData* dataLength = [[NSData alloc] initWithBytes:&theInt length:sizeof(theInt)];

然后在java端,我得到一个像这样的int:

int theInt = aInputStreamOfSocket.readInt();

但是值改变了!就我而言,我发送 1225516 并收到 749933056有什么问题吗?

最佳答案

你的麻烦是endianness中的差异。基于 Intel 的处理器使用小端字节顺序,而基于网络的传输几乎总是大端字节顺序。因此,Java 希望 readInt() 采用大尾数法。理想情况下,您找到一种方法将 int 作为大尾数发送以符合预期的行为。然而,我没有现成的代码,因此以下是如何在 Java 端读取小端字节序:

int ch1 = aInputStreamOfSocket.read();
int ch2 = aInputStreamOfSocket.read();
int ch3 = aInputStreamOfSocket.read();
int ch4 = aInputStreamOfSocket.read();
if ((ch1 | ch2 | ch3 | ch4) < 0) {
throw new EOFException();
}
int theInt = ch1 + (ch2 << 8) + (ch3 << 16) + (ch4 << 24);

关于java - 通过socket从objective-c发送一个int到java,但是java端的值改变了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5712066/

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