Sal*_*umi 1 matlab simulink function
我从串口读取4个字节,我想创建一个Matlab函数将它们转换为浮点数,例如:如果我读A = [65 240 0 0]我必须有30个符合IEEE754标准. - 我使用过Simulink块"byte unpack",但我遇到了问题.实际上我应该阅读超过18个参数.每个参数都是4个字节的数组.然后我应该使用18个字节的unpack.
默认情况下,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管理字节序的函数。
为了避免重新发明轮子,只需使用
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字节的浮点数.