将4个字节转换为float matlab

时间:2015-05-01 19:41:09

标签: matlab function simulink

我从串口读取4个字节,我想创建一个Matlab  将它们转换为浮点数的函数   例如:如果我读A = [65 240 0 0]我必须有30个    IEEE754标准。   - 我使用过Simulink块"字节解包"但我有问题。事实上    我应该阅读超过18个参数。每个参数是4个字节    array.then我应该使用18字节解包。

2 个答案:

答案 0 :(得分:5)

为避免重新发明轮子,只需使用

即可
A = fread(obj,size,'precision')

documentation

中所述

例如,

[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来管理结束。