繁体   English   中英

使用ByteBuffer在Java中发布复制字节字符串

[英]Issue replicating byte string in Java with ByteBuffer

我正在尝试复制Java中在Objective-C(在iOS上)中生成的字节字符串,但遇到了麻烦。 这是我要产生的字符串:

"\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]得到的整数数组是[16777216, 16777216, 0, 0] 显然我做错了事,希望有人能指出我正确的方向。

iOS是低位字节序,因此4字节整数的最低有效字节排在第一位。

Java ByteBuffer 默认为big-endian ,因此情况相反。

字节缓冲区的初始顺序始终为BIG_ENDIAN

您可以使用

bytes.order(ByteOrder.LITTLE_ENDIAN);

您想要的是:

ByteBuffer bytes = ByteBuffer.allocate(16);
bytes.putInt(16777216);
bytes.putInt(16777216);
bytes.putInt(0);
bytes.putInt(0);

String byteString = new String(bytes.array());

平台的字节顺序不同,因此当您放入4个字节时,这些字节将反转。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM