【发布时间】:2013-04-10 20:49:06
【问题描述】:
我想通过串行 COM 向 Matlab 发送一个浮点数并将其解释为单精度浮点数。
我可以通过串口将数据作为字节包发送。
所以在发送方我将 32 位浮点数移位 8,将其屏蔽并发送
(byte)((number >> 8) & 0x000000FF)
(byte)((number >> 16) & 0x000000FF)
...
\r\n (line termination)
现在,在 Matlab 上,我使用fscanf(s,'%f') 连接到 COM 并接收,其中 s 是串行实例。它读取字节直到终止行。
现在,问题是 Matlab 上的输出与我发送的不一样。我认为问题在于不同的浮点表示或不同的发送顺序。
例如。如果我发送十进制 1.2 (0x3f99999a),Matlab 打印 1.5315e+010
我做错了什么?
编辑:
Matlab fscanf http://www.mathworks.co.uk/help/matlab/ref/fscanf.html
【问题讨论】:
-
那个发件人代码太破了,这不好笑。为什么要移位四位?
number是从哪里来的,你连浮点数都不能用>>?是什么让您认为可以将fscanf用于二进制数据?当其中一个数据字节恰好是\r或\n时会发生什么? -
@Ben Voigt 对不起。我的意思是移动8位。创建线程时的错字。 Matlab 在收到\r 或\n 时会自行终止读取。 Number 是 C 中的浮点数。我添加了指向 matlab 函数的链接,该函数声明可以接收和格式化二进制数据。
标签: matlab floating-point