byte位元組陣列 轉換成double型別
例子
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: 位元組陣列。
- startIndex,Type: value 內的起始位置。
- 由開始的八個位元組構成的雙精度浮點數 startIndex。
順序由BitConverter.IsLittleEndian 欄位來反映
指示資料儲存在此計算機體系結構中的位元組順序(“endianness”)。如果體系結構是 little-endian,則為 true;如果體系結構是 big-endian,則為 falseLittle-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) -- 高位
---------------
棧頂 (低地址)