0

我想通过串行 COM 向 Matlab 发送一个浮点数并将其解释为单精度浮点数。

我可以将数据作为字节数据包通过串行发送。

所以在发送方我将 32 位浮点数移位 8,将其屏蔽并发送

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

现在,在 Matlab 上,我连接到 COM 并使用fscanf(s,'%f')where s 是串行实例来接收。它读取字节直到终止行。

现在,问题是 Matlab 上的输出与我发送的不一样。我相信问题在于不同的浮点表示或不同的发送顺序。

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

我可能做错了什么?

编辑:

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

4

2 回答 2

1

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

于 2013-04-10T20:56:10.977 回答
1

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

于 2013-04-11T08:14:57.547 回答