【发布时间】:2019-01-16 14:04:13
【问题描述】:
编辑(摘要)
我试图将 Char/String 数据解释为 Byte,一次 4 个字节。这是因为我只能让TComport/TDatapacket 将流数据解释为字符串,而不是任何其他数据类型。我仍然不知道如何让Read 方法和OnRxBuf 事件处理程序与TComport 一起工作。
问题总结
我正在尝试使用一些 Delphi 代码从质谱仪 (MS) 获取数据。仪器通过串口线连接,遵循 RS232 协议。我能够毫无问题地发送命令并处理来自 MS 的基于文本的输出,但我在解释数据缓冲区时遇到了问题。
背景
来自本仪器的用户手册:
"除离子电流值外,RGA 的输出是 ASCII 字符串,由换行符 + 回车终止符终止。离子信号以 10^-16 安培为单位的整数表示,并直接以十六进制格式(四字节整数,2 的补码格式,最低有效字节在前)以获得最大数据吞吐量。"
我不确定 (1) 十六进制数据是否可以正确存储在字符串变量中。我也不确定如何(2)在 Delphi 中实现 2 的补码和 (3) 首先是最低有效字节。
【问题讨论】:
-
唯一可以存储十六进制的地方是字符串。那是因为十六进制是数字的文本表示。也许你真正拥有的是二进制数据,即字节数组,这就是你所说的十六进制的意思。
-
很公平,但我是否正确假设我应该将从 OnPacket 事件中获得的“字符串”转换为字节数组以继续前进?
-
我真的不知道。我不能理解这个问题。不过,我没有看到任何似乎与十六进制有关的代码。
-
基本上,我一次从仪器获取 4 个字节的数据,但事件处理程序将其存储在一个字符串中。我想将该字符串转换为整数值,但我得到的字符串是“æ”等。所以我必须弄清楚如何将其转换为字节数组以继续前进。
-
所以不要读入字符串。请改为调用
Read方法。 stackoverflow.com/questions/2458219 说真的,我敦促您退后一步,放慢速度,花一些时间真正尝试理解二进制和文本之间的区别,以及十六进制的真正含义。清楚这一点非常重要。
标签: delphi serial-port buffer delphi-5 tcomport