我想通过串行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 :(得分:1)
当数据是二进制时,请尝试fread
而不是fscanf
。
答案 1 :(得分:1)
默认情况下,number
的类型为double,即64位。您应该执行64位而不是32位的移位。否则,您可以将数字声明为uint32类型并执行32位移位。