有关字节序列的存放格式目前有两种方案: 常见的操作系统是小端,通讯协议是大端。 采用大端模式存放数据,处理器体系,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);
}