我从串口读取4个字节,我想创建一个Matlab 将它们转换为浮点数的函数 例如:如果我读A = [65 240 0 0]我必须有30个 IEEE754标准。 - 我使用过Simulink块"字节解包"但我有问题。事实上 我应该阅读超过18个参数。每个参数是4个字节 array.then我应该使用18字节解包。
答案 0 :(得分:5)
为避免重新发明轮子,只需使用
即可A = fread(obj,size,'precision')
中所述
例如,
[A,count] = fread(obj, 18, 'float32');
应读取18个4字节浮点数。
答案 1 :(得分:4)
默认情况下,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
来管理结束。