系統環境:Win10+VS2017+C#
使用C#編寫上位機程序提出的需求:需要將串口採集到的16進制數據轉換成float類型數據(保留數據精度)。
string data_Hex = “42001307”;
uint data_uint = uint.Parse(data_Hex, System.Globalization.NumberStyles.AllowHexSpecifier);
byte[] data_byte = BitConverter.GetBytes(data_uint);
float data_float = BitConverter.ToSingle(data_byte, 0);
上述代碼將16進制字符串轉換爲float類型數據,代碼轉換後的值爲32.01858139038086。
上面使用的是大端模式16進制數據根據IEEE 754規則進行轉換得到的數據。
當替換成自己的16進制數據轉換後發現數據值和使用進制轉換器轉換的數據值不相同的時候,需要考慮串口通訊過程中是否存在大小端問題。
Big-Endian: 低地址存放高位,如下:
高地址
---------------
buf[3] (0x42) – 低位
buf[2] (0x00)
buf[1] (0x13)
buf[0] (0x07) – 高位
---------------
低地址
42001307轉換後的數據爲:32.01858139038086
Little-Endian: 低地址存放低位,如下:
高地址
---------------
buf[3] (0x07) – 高位
buf[2] (0x13)
buf[1] (0x00)
buf[0] (0x42) – 低位
--------------
低地址
07130042轉換後的數據位:1.1059126616820411e-34
需要判斷傳感器採集回來的數據屬於哪一類,如果計算出來的值和數據轉換器轉換出來的值不對的話,大小端轉換一下再測試一下。