byte字节数组 转换成double类型

来源:互联网 发布:暴走大事件 知乎 编辑:程序博客网 时间:2024/06/07 01:05

例子

byte[] byteArray = {64,   47,   215,   10,   61,   112,   163,   215};

Array.Reverse(byteArray);

var result = BitConverter.ToDouble(byteArray, 0);  // 结果为15.92

字节转换

BitConverter.ToDouble 方法 (Byte[], Int32)

返回双精度浮点数字八个字节转换的字节数组中指定的位置。

public static double ToDouble(byte[] value,int startIndex)
参数:value,Type: System.Byte[]  字节数组。
        startIndex,Type: System.Int32 ,value 内的起始位置。
返回值:Type: System.Double,由开始的八个字节构成的双精度浮点数 startIndex。
ToDouble 方法将字节转换从索引 startIndex 到 startIndex + 7 到 Double 值。字节数组中的顺序必须反映计算机系统的体系结构; 

顺序由BitConverter.IsLittleEndian 字段来反映

指示数据存储在此计算机体系结构中的字节顺序(“endianness”)。如果体系结构是 little-endian,则为 true;如果体系结构是 big-endian,则为 false

Little-Endian与Big-Endian

a) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
b) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。

内存中:栈是向下增长的,而堆是向上增长的。

在栈 上分配一个unsigned char buf[4],那么这个数组变量在栈上是如何布局的呢?看下图:
栈底 (高地址)
----------
buf[3]
buf[2]
buf[1]
buf[0]

----------
栈顶 (低地址)


在十进制中我们都说靠左边的是高位,靠右边的是低位,在其他进制也是如此。就拿 0x12345678来说,

从高位到低位的字节依次是0x12、0x34、0x56和0x78。

以unsigned int value = 0x12345678为例,分别看看在两种字节序下其存储情况,我们可以用unsigned char buf[4]来表示value:

Little-Endian: 低地址存放低位,如下图:
栈底 (高地址)
---------------
buf[3] (0x12) -- 高位
buf[2] (0x34)
buf[1] (0x56)
buf[0] (0x78) -- 低位
--------------
栈 顶 (低地址)

Big-Endian: 低地址存放高位,如下图:
栈底 (高地址)
---------------
buf[3] (0x78) -- 低位
buf[2] (0x56)
buf[1] (0x34)
buf[0] (0x12) -- 高位
---------------
栈顶 (低地址)

0 0
原创粉丝点击