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
)
顺序由BitConverter.IsLittleEndian 字段来反映
指示数据存储在此计算机体系结构中的字节顺序(“endianness”)。如果体系结构是 little-endian,则为 true;如果体系结构是 big-endian,则为 false。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) -- 高位
---------------
栈顶 (低地址)