将4个字节转换为float matlab

Sal*_*umi 1 matlab simulink function

我从串口读取4个字节,我想创建一个Matlab函数将它们转换为浮点数,例如:如果我读A = [65 240 0 0]我必须有30个符合IEEE754标准. - 我使用过Simulink块"byte unpack",但我遇到了问题.实际上我应该阅读超过18个参数.每个参数都是4个字节的数组.然后我应该使用18个字节的unpack.

Hok*_*oki 5

默认情况下,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
Run Code Online (Sandbox Code Playgroud)

等一下:

Afloat =
   8.6186862e-41
Run Code Online (Sandbox Code Playgroud)

哎呀,看来你的收集机制使用的字节顺序与 Matlab 使用的字节顺序相反。没问题,您可以通过“翻转”字节数组来更改字节序。

因此,请使用:

>> Afloat = typecast( fliplr(A) , 'single')
Afloat =
    30
Run Code Online (Sandbox Code Playgroud)

成功 :)

您还可以查看swapbytes管理字节序的函数。


Ily*_*kiy 5

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

A = fread(obj,size,'precision')
Run Code Online (Sandbox Code Playgroud)

文档中所述

例如,

[A,count] = fread(obj, 18, 'float32');
Run Code Online (Sandbox Code Playgroud)

应阅读18个4字节的浮点数.