首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ByteBuffer开关特性

ByteBuffer开关特性
EN

Stack Overflow用户
提问于 2014-11-14 12:29:45
回答 2查看 10.7K关注 0票数 5

我试图改变ByteBuffer的地位,但没有任何影响。做错什么了?也许我的调试主要功能不正确?

代码语言:javascript
复制
@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);
}

主函数打印此二进制字符串: 01111101 00000000 00000000 00000000,但必须打印: 00000000 101111100000000000000

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-14 12:37:01

在将值放入缓冲区之前,需要更改endianness。只需在分配缓冲区大小后直接移动行,就可以了。

代码语言:javascript
复制
//        DEBUG
ByteBuffer buffer = ByteBuffer.allocate(octets);
buffer.order( ByteOrder.BIG_ENDIAN);
for(byte b: intVal.toByteArray()){
    buffer.put(b);
}

..。

此外,endianness只会影响较大数值的字节顺序,而不会像解释的here那样影响字节。

票数 13
EN

Stack Overflow用户

发布于 2014-11-14 12:38:50

它应在创建缓冲区后立即设置,请参见

order.shtml

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26930066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档