Objective C和JAVA的字节序问题

4

我正在使用64位Mac,并确信Java(在我的情况下为1.6)正在使用big-endians。

我正在尝试从我的iPhone(Objective C)与我的Java服务器进行通信。iPhone(Objective C)使用little endian还是big endian?

如果它使用little endian,那么我该如何将NSData * size转换为bigEndian,以便Java可以正确读取它?

int s = [protoToSend serializedSize]; 
NSData *size = [NSData dataWithBytes:&s length:1]; 

谢谢您提前的支持。

2
你可以更改Java端使用小端。DataInputStream仅支持Big Endian,但ByteBuffer支持任何一种。 - Peter Lawrey
我会将 length:1 替换为 length:sizeof(s),我想 int 是4个字节,对吧? - Richard Brightwell
1个回答

4
你可以使用CoreFoundation 字节交换例程来转换原始类型的字节序。如果你有一个int,你可以使用CFSwapInt32HostToBig()将32位整数交换到大端字节序,然后再发送到你的Java服务器。
最终,使用一些标准格式(例如JSON、XML等)通过网络传输会更好,让序列化和反序列化库处理字节序问题,而不是重复造轮子。

嗨,我本以为会是这种情况。我正在使用Google Protocol Buffers,我认为可能存在问题,但我不确定如何验证它 :( - robert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接