gpt4 book ai didi

java - ByteBuffer 切换字节顺序

转载 作者:行者123 更新时间:2023-11-30 03:40:26 25 4
gpt4 key购买 nike

我正在尝试切换ByteBuffer的字节序,但没有任何效果。我做错了什么?也许我的调试主函数不正确?

@Override
public byte[] toBytes(BigDecimal type) {
int octets = getOctetsNumber();
BigInteger intVal = type.unscaledValue();

byte[] temp = intVal.toByteArray();
int addCount = octets - temp.length;

// DEBUG
ByteBuffer buffer = ByteBuffer.allocate(octets);
for(byte b: intVal.toByteArray()){
buffer.put(b);
}
if (addCount > 0){
for (; addCount > 0; addCount--) {
buffer.put((byte)0x00);
}
}
buffer.flip();

buffer.order( ByteOrder.BIG_ENDIAN);

return buffer.array();
}

public static void main(String[] arg) {
IntegerDatatype intVal = new IntegerDatatype(17);
BigDecimal bd = new BigDecimal(32000);

byte[] bytes = intVal.toBytes(bd);
String out = new String();
for (byte b : bytes) {
out += Integer.toBinaryString(b & 255 | 256).substring(1) + " ";
}
System.out.println(out);
}

main函数打印这个二进制字符串:01111101 00000000 00000000 00000000但必须打印:00000000 10111110 00000000 00000000

最佳答案

在将值放入缓冲区之前,您需要更改字节序。只需在分配缓冲区大小后立即移动该行就可以了。

//        DEBUG
ByteBuffer buffer = ByteBuffer.allocate(octets);
buffer.order( ByteOrder.BIG_ENDIAN);
for(byte b: intVal.toByteArray()){
buffer.put(b);
}

...

此外,字节顺序仅影响较大数值的字节顺序,而不影响字节顺序 here

关于java - ByteBuffer 切换字节顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26930066/

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