我从串口读取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