我正在尝试复制我在Objective-C(在iOS上)用Java生成的字节字符串但是遇到了麻烦。这是我想要制作的字符串:
"\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
我从4个整数的数组中获取该字符串 - [1,1,0,0]
- 其中每个整数有4个字节。在这里查看了一堆问题后,我尝试使用ByteBuffer
在Java中构建该字符串,如下所示:
ByteBuffer bytes = ByteBuffer.allocate(16);
bytes.putInt(1);
bytes.putInt(1);
bytes.putInt(0);
bytes.putInt(0);
String byteString = new String(bytes.array());
然而,这给了我:
"\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00"
当我解压缩时,我获得的整数数组是[16777216, 16777216, 0, 0]
。显然我做错了,我希望有人能指出我正确的方向。
答案 0 :(得分:5)
iOS是little-endian,因此首先是4字节整数的最低有效字节。
Java ByteBuffer
defaults to big-endian,因此恰恰相反。
字节缓冲区的初始顺序始终为BIG_ENDIAN
您可以使用
更改此设置bytes.order(ByteOrder.LITTLE_ENDIAN);
答案 1 :(得分:0)
你想要的是:
ByteBuffer bytes = ByteBuffer.allocate(16);
bytes.putInt(16777216);
bytes.putInt(16777216);
bytes.putInt(0);
bytes.putInt(0);
String byteString = new String(bytes.array());
平台的字节顺序不同,所以当你输入4个字节时,字节就会反转。