数据字节,大小端概念,以及物联网数据传输使用short,long表示double

127 阅读2分钟

有关字节序列的存放格式目前有两种方案: 常见的操作系统是小端,通讯协议是大端。 采用大端模式存放数据,处理器体系,PowerPC系列,IBM,Sun; 采用小端模式存放数据,处理器体系,X86系列,DEC。

什么是大端模式,什么是小端模式呢?

1)大端模式是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址 中。大端存放模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往 低位放。

2)小端模式是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址 中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值 低,此模式和日常数字计算在方向上是一致的。

举一个例子将十六进制数0X1234abcd写入以0x0000开始的内存地址中。 十六进制数 0X1234abcd 使用两种模式存放的结果

|Address |大端模式 |小端模式
|0x0000  |0x12     |0xcd
|0x0001  |0x34     |0xab
|0x0002  |0xab     |0x34
|0x0003  |0xcd     |0x12

物联网数据采集情景。传输double类型数据。数据首先会被转换为字节流,使用4个short存储,再将short 转换为long,然后将long转double。

public static void main(String[] args) {
        double d9 = 98.76;
        long long9 = Double.doubleToLongBits(d9);
        System.out.println(Long.toBinaryString(long9));
        //100000001011000101100001010001111010111000010100011110101110001
        //拆分为4个short
        short short1 = (short) 0b0100000001011000;
        short short2 = (short) 0b1011000010100011;
        short short3 = (short) 0b1101011100001010;
        short short4 = (short) 0b0011110101110001;
        long long1 = (long) short1;
        long long2 = (long) short2;
        long long3 = (long) short3;
        long long4 = (long) short4;
        //将4个long按照double源数据的二进制位顺序,租装成long类型数据
        long longall = ((long1 << 48) >>> 0) 
                        | ((long2 << 48) >>> 16) 
                        | ((long3 << 48) >>> 32) 
                        | ((long4 << 48) >>> 48);
        // 将long类型数据,转换为double
        double ddd = Double.longBitsToDouble(longall);
        System.out.println(ddd);
}