2013-04-10 92 views
0

在Matlab浮点我想通过串行COM发送一个浮点数到Matlab和它解释为单精度浮点数。接收来自字节

我可以通过串口作为字节的数据包发送数据。因此,在发送端

我转向32位由8浮点数,掩盖它,并把它

(byte)((number >> 8) & 0x000000FF) 
(byte)((number >> 16) & 0x000000FF) 
... 
\r\n (line termination) 

现在,Matlab的我连接到COM,并通过使用fscanf(s,'%f')其中s是串行实例接收。它读取字节直到终止线。现在

,问题是,MATLAB的输出还不如我发出同样的。我相信问题是不同的浮点表示法还是不同的发送顺序。

例如。如果我发送十进制1.2 (0x3f99999a),Matlab打印1.5315e+010

我能做什么错?

编辑:

Matlab的的fscanf http://www.mathworks.co.uk/help/matlab/ref/fscanf.html

+0

发送者的代码破坏了,从而不好笑。你为什么移动四位? 'number'从哪里来的,你甚至不能用浮点运算符>>?是什么让你认为你可以使用'fscanf'作为二进制数据?当其中一个数据字节碰巧是'\ r'或'\ n'时会发生什么? – 2013-04-10 20:53:26

+0

@Ben Voigt对不起。我的意思是转移8位。创建线程时出现错字。当Matlab收到\ r或\ n时,Matlab自行终止读取。 Number是C中的一个浮点数。我已经添加了指向可以接收和格式化二进制数据的matlab函数的链接。 – 2013-04-10 20:55:02

回答

1

默认情况下,number是类型双它是64位的。您应该执行64位而不是32位的转换。否则,您可以将该数字声明为uint32类型并执行32位移位。

1

尝试fread代替fscanf,当数据是二进制的。