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

时间:2019-01-16 14:04:13

标签: delphi serial-port buffer delphi-5 tcomport

编辑(抽象)

我尝试将import { HttpClient, HttpHeaders } from '@angular/common/http'; / this.http.get<Person[]>('url', options).subscribe(persons => this.persons = persons /* ... */);数据解释为Char,一次4个字节。这是因为我只能让String / Byte将流式数据解释为String,而不是其他任何数据类型。我仍然不知道如何获取TComport方法和TDatapacket事件处理程序以与TComport一起使用。

问题摘要

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

背景

从该仪器的用户手册中:

  

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

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

1 个答案:

答案 0 :(得分:0)

按照@David Heffernan的建议,我去修改了我的数据类型。尝试从字符中获取二进制数据是行不通的,因为不能正确表示0-255之间的所有值。基本上,您会丢失数据。特别是您的数据一次代表4个字节。

对我来说,解决方案是使用Async Professional组件而不是Denjan的Comport库。它可以更好地处理数据流,并具有内置日志,我可以使用该日志来了解如何解释仪器中的流驻留。也有更好的记录。因此,如果您不熟悉串行通信(例如我),那就去吧。