即是所謂的IEEE754標準,這也是大多數(shù)硬件存儲浮點數(shù)的標準,。單精度浮點數(shù)占4個字節(jié),表示范圍為:在負數(shù)的時候是從 -3.402823E38 到 -1.401298E-45,,而在正數(shù)的時候是從 1.401298E-45 到 3.402823E38 ,。 在C#中的轉換函數(shù)為: 1,由四個字節(jié)的十六機制數(shù)組轉浮點數(shù): byte[] bytes = new byte[4]; BitConverter.ToSingle(bytes, 0); 2,由浮點數(shù)轉數(shù)組: byte[] bytes = BitConverter.GetBytes(floatValue); 這種轉換方法經(jīng)常用于串口通訊中,表示范圍足夠各種傳感器數(shù)值傳輸及工控場合,,將要發(fā)送的浮點數(shù)據(jù)轉換為4個字節(jié)的十六機制數(shù),,然后由串口發(fā)出,在接收端再將其轉換為浮點數(shù),。 單片機或非.net環(huán)境下使用轉換程序則不能調用BitConverter類,! 提供以下代碼以供轉換: 未修改過的如下:可以在C#中直接調用而不用庫函數(shù) public static float ToFloat(byte[] data)
public static byte[] ToByte(float data) 如果對工程進行直接編譯會報出一下錯誤:這是因為C#默認不提供指針支持,只有在不安全代碼的形式下才可以用指針,。
單片機串口通訊浮點轉換函數(shù) 我在AVR串口通信協(xié)議中用到了這部分,,直接將單片機的運算結果(浮點類型)轉換為(字節(jié)類型)嵌入串口通信協(xié)議中,,上傳至上位機,。 下面為符合IEEE754標準將浮點數(shù)轉換為四個字節(jié)的數(shù)組的函數(shù)源代碼:已經(jīng)用于mega16單片機的串口通信中。 WinAVR-20090313測試通過: void FloatToByte(float floatNum,unsigned char* byteArry) 下面為符合IEEE754標準的由四個字節(jié)型數(shù)組轉化為相應的浮點數(shù) WinAVR-20090313測試通過: float ByteToFloat(unsigned char* byteArry) 調用測試方法:其中USART_Transmit();為向串口發(fā)送的函數(shù),。 unsigned char floatToByte[4]; 在上位機用串口進行讀取時調用 BitConverter.ToSingle(bytes, 0); 就會轉換成12.15,,測試方法可以隨著需求改變。 |
|