如何将十六进制数据(存储在字符串变量中)转换为整数值



编辑(摘要)

我尝试将Char/String数据解释为Byte,每次4个字节。这是因为我只能让TComport/TDatapacket将流式数据解释为String,而不能将其解释为任何其他数据类型。我仍然不知道如何让Read方法和OnRxBuf事件处理程序与TComport一起工作。

问题摘要

我正在尝试使用一些Delphi代码从质谱仪(MS)中获取数据。该仪器通过串行电缆连接,并遵循RS232协议。我能够毫无问题地发送命令和处理来自MS的基于文本的输出,但我在解释数据缓冲区时遇到了问题。

背景

来自该仪器的用户手册:

"除离子电流值外,RGA的输出是由换行+回车终止符终止的ASCII字符串。离子信号以10^-16安培为单位的整数表示,并以十六进制格式(四字节整数,2的补码格式,最低有效字节优先)直接传输,以获得最大数据吞吐量。">

我不确定(1)十六进制数据是否可以正确存储在字符串变量中。我也不知道如何(2)在Delphi中实现2的补码,以及如何首先实现最低有效字节。

根据@David Heffernan的建议,我修改了我的数据类型。尝试从字符中获取二进制数据是行不通的,因为并非所有0-255之间的值都能正确表示。基本上,一路上你会丢失数据。尤其是如果您的数据每次表示4个字节。

对我来说,解决方案是使用AsyncProfessional组件,而不是Denjan的Compost-lib。它能更好地处理数据流,并且有一个内置的日志,我可以用它来了解如何解释仪器的流式呼吸。它也有更好的记录。所以,如果你是串行通信的新手(就像我一样),那就试一试吧。

最新更新