Java 小端顺序
我需要将数据存储为 LITTLE_ENDIAN
而不是默认的 BIG_ENDIAN
。
这是我的示例代码:
for (int i = 0; i < logo.length; i++) {
logoArray[i] = ((Integer) logo[i]).byteValue();
logoArray[i] = (byte) (((logoArray[i] & 1) << 7) + ((logoArray[i] & 2) << 5) + ((logoArray[i] & 4) << 3)
+ ((logoArray[i] & 8) << 1) + ((logoArray[i] & 16) >> 1) + ((logoArray[i] & 32) >> 3)
+ ((logoArray[i] & 64) >> 5) + ((logoArray[i] & 128) >> 7));
}
对于LITTLE_ENDIAN
,应该如何使用 ByteBuffer 重写它,因为以下代码对我不起作用:
ByteBuffer record = ByteBuffer.allocate(logo.length);
record.order(ByteOrder.LITTLE_ENDIAN);
...
record.put(((Integer) logo[i]).byteValue());
...
record.array(); // get
I need to store data as LITTLE_ENDIAN
instead of default BIG_ENDIAN
.
Here's my sample code:
for (int i = 0; i < logo.length; i++) {
logoArray[i] = ((Integer) logo[i]).byteValue();
logoArray[i] = (byte) (((logoArray[i] & 1) << 7) + ((logoArray[i] & 2) << 5) + ((logoArray[i] & 4) << 3)
+ ((logoArray[i] & 8) << 1) + ((logoArray[i] & 16) >> 1) + ((logoArray[i] & 32) >> 3)
+ ((logoArray[i] & 64) >> 5) + ((logoArray[i] & 128) >> 7));
}
How should it be rewritten with ByteBuffer, for LITTLE_ENDIAN
, as the following code doesn't work for me:
ByteBuffer record = ByteBuffer.allocate(logo.length);
record.order(ByteOrder.LITTLE_ENDIAN);
...
record.put(((Integer) logo[i]).byteValue());
...
record.array(); // get
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您使用
putInt
而不是put
,则 ByteBuffer 将适合您。字节数组(如
Integer.byteValue()
)没有“字节顺序”,因此它按原样存储。ByteBuffer will work for you, if you use
putInt
and notput
.A byte array (as
Integer.byteValue()
) has no "endianness" so it is stored as it is.正如 andcoz 所说,当您一次放置一个字节时,不会考虑字节序。下面是一个向您展示如何操作的示例:
输出:
As andcoz says, the endian isn't taken into account when you put one byte at a time. Here is an example to show you how to do it:
Output: