字节数组的大端序和小端序

不羁的心 提交于 2020-01-31 21:21:15

时间记录:2020-1-22

问题描述:在接受别人传递过来的字节数组的时候,然后发现数据和其的测试程序表现的不一致,通过打印16进制的数据来看发现,数据的顺序是颠倒的,想到了字节的顺序问题,也就是大端序和小端序。

字义解释:
数据存储在内容中,是以什么样的字节顺序,也就是指是从高位还是地位开始存储的,一般情况相下都是以小段序的来存储,也就是从低位开始存储的,但是在网络传输过程中,都是默认的以大端序来传递的,也就是从高位开始,我们再发送数据的时候回将小端序转换为大端序,然后在进行发送的操作。而有的时候由于机器的特殊性,导致到数据的顺序不一致,就需要自己进行约定操作。java中默认是以大端序来进行的

相关操作:
在java中也提供了类似的API,将自己以什么样的顺序来进行展示的操作

/**
     * Modifies this buffer's byte order.
     *
     * @param  bo
     *         The new byte order,
     *         either {@link ByteOrder#BIG_ENDIAN BIG_ENDIAN}
     *         or {@link ByteOrder#LITTLE_ENDIAN LITTLE_ENDIAN}
     *
     * @return  This buffer
     */
    public final ByteBuffer order(ByteOrder bo) 
/**
     * Constant denoting big-endian byte order.  In this order, the bytes of a
     * multibyte value are ordered from most significant to least significant.
     */
    public static final ByteOrder BIG_ENDIAN
        = new ByteOrder("BIG_ENDIAN");

    /**
     * Constant denoting little-endian byte order.  In this order, the bytes of
     * a multibyte value are ordered from least significant to most
     * significant.
     */
    public static final ByteOrder LITTLE_ENDIAN
        = new ByteOrder("LITTLE_ENDIAN");

注意,通常情况下不需要考虑这个顺序的问题,只要按照正常流程就可以了。除非是什么特殊的情况,像展示信息的需要转换成大家能够理解的模式。

如何验证这个问题
大致上就是分配一段自己知道的内存,然后读取第一个字节,看是什么,就可以了。

总结: 记住这个问题就可以了,属于一些小的细节部分。

时间记录:2020-1-31

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!