我從串口讀取4個字節,我想創建一個Matlab 函數將它們轉換爲浮點數 例如:如果我讀了A = [65 240 0 0]我必須根據 IEEE754標準有30個。 - 我已經使用Simulink塊「字節解壓」,但我有問題。實際上 我應該讀取18個參數。每個參數是4個字節 array.then我應該使用18個字節解壓縮。轉換4個字節浮點數matlab
回答
默認情況下,Matlab將使用雙精度來存儲任何沒有指定類型的新值。如果您知道您正在閱讀byte
,那麼最好是直接將它們收集爲uint8
(Matlab的無符號字節類型),如果可以的話(在您撥打fread
或同等電話時)。
如果您無法直接將它們作爲uint8
收集,則將它們按原樣投射,然後使用typecast
函數。
A = [65 240 0 0] ; %// Collected bytes
A = uint8(A) ; %// cast them to "uint8" if they are not already
Afloat = typecast(A , 'single') ; %// cast the 4 bytes as a 32 bit float
等一下:
Afloat =
8.6186862e-41
哎呀,看來你的收集機制使用的字節順序是相反的是利用Matlab使用的一個。沒問題,你可以通過「翻轉」字節數組來改變字節順序。
所以取而代之,使用方法:
>> Afloat = typecast(fliplr(A) , 'single')
Afloat =
30
成功:)
您也可以看看功能swapbytes
管理字節序。
非常感謝你 –
@SalimSaloumi。沒問題,樂意幫忙。如果我的答案或其他問題解決了您的問題,請考慮「接受」它(投票箭頭下方的綠色標記),以向未來的讀者展示您的問題已得到解決。 – Hoki
爲了避免重新發明輪子,只需使用
A = fread(obj,size,'precision')
例如描述的,
[A,count] = fread(obj, 18, 'float32');
應改爲18間4字節浮動。
取決於他如何接收數據以及從哪個設備接收數據並不總是可能的(某些設備發送字節1,並且在接收下一個設備之前必須先進行確認)。但是如果他確實可以用'fread'直接讀取4個字節,則應該提及最後一個參數'machineformat',它將指定字節順序。他似乎需要它;-) – Hoki
- 1. 4字節數組轉換爲浮點數(c)
- 2. 將4字節轉換爲浮點數的最快方法C++
- 3. 轉換字節數組成浮點
- 4. 轉換4字節的數據包含uint和浮動浮動
- 5. 將字節[4]轉換爲浮點數 - 整型[4]數組可以工作,但字節[4]不會
- 6. MATLAB轉換大端順序字節到浮點值
- 7. 如何將浮點數轉換爲松鼠中的4個原始字節?
- 8. 將字節轉換爲浮點值
- 9. 如何將4位浮點數轉換爲2位浮點數
- 10. 結合四個字節並轉換爲浮點數
- 11. 如何轉換4個字節陣列漂浮在Java
- 12. 在Swift中將半精度浮點數(字節)轉換爲浮點數
- 13. MATLAB:一個UINT32(4字節)值轉換成相應的IEEE單精度浮點形式
- 14. 將4字節浮點數據壓縮爲1字節
- 15. 將int字節流轉換爲浮點字節流
- 16. 將wav音頻格式字節數組轉換爲浮點數
- 17. 將字節數組轉換爲浮點數
- 18. 如何將有符號字節數組轉換爲浮點數?
- 19. 如何將浮點數組轉換爲字節數組?
- 20. 將字節數組轉換爲浮點數
- 21. 將2個字節或3個字節轉換爲C中的浮點型號
- 22. ValueError:無法將字符串轉換爲浮點數:「nbformat」:4
- 23. 字符數組到浮點數轉換
- 24. 將字符中的浮點數轉換爲浮點數(PYTHON)
- 25. 如何將浮點數組轉換爲字節[]並返回?
- 26. sbcl:將(無符號字節32)轉換爲單浮點數
- 27. 如何將字節轉換爲Swift中的半浮點數?
- 28. 將隨機字節(0-255)轉換爲PHP中的浮點數?
- 29. 將netcdf文件中的浮點數轉換爲字節
- 30. 將字符串轉換爲浮點數
你想創建一個函數,或者使用一個內建函數:['typecast'](http://mathworks.com/help/matlab/ref/typecast.html) – Hoki
正如答案之一,您可能沒有正確使用字節解壓縮塊。它可能只是改變塊中的末端設置的問題。你不會說你如何使用和參數化該塊,也不知道你有什麼「問題」。 – am304