微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

接收十六进制数字并转换为INT或STRING

如何解决接收十六进制数字并转换为INT或STRING

我正在以16位(2字节)的形式从ATmega发送数据。我在Delphi中有一个串行组件来接收数据。

  • 如果我发送一个字符串(例如'FF'),则会将数据添加到我的Memo组件中。很好。
  • 但是,如果我发送原始十六进制$FF,则会出现接收数据闪烁提示“已接收数据”,但是Memo组件的行中未添加任何内容。我不确定如何将这些数据转换为Integer或String(我可以使用)。

一个解决方案会很好,但是对Delphi如何看待StringChar等的解释会很好。谢谢。

解决方法

接收数据时,可以将它们转换为字节(如果需要)并转换为十六进制表示形式。

例如,如果您得到AnsiString

  AnsiS := Comport.ReadAnsiString; //your reading here
  for i := 1 to Length(AnsiS) do
     Memo1.Lines.Add(IntToHex(Ord(AnsiS[i]),2));
,

当您的ATMega发送字符串“ FF”时,它会发送两个字符(“ F”和“ F”),每个字符编码为ASCII码十进制70。当您的Delphi程序接收到这两个字节(d70和d70)时,将这些ASCII代码转换为字符“ F”和“ F”,并将它们添加到备注中。

当您的ATMega发送十六进制值FF(在Delphi代码中为$ FF)时,它将发送一个带有十进制值255的字节。当您的Delphi程序收到此字节(d255)时,它将尝试将其转换为a。字符,但找不到此代码的可打印字符表示形式。因此,便笺没有添加任何内容。或者,也许您的接收代码正在过滤该值以及其他值。

目前尚不清楚您要寻找哪种解决方案,但是您可以使用function IntToHex(Value: Integer; Digits: Integer): string;System.SysUtils.Format(const Format: string; const Args: array of const): string;将字节值(d255)转换为十六进制或十进制表示形式,或将其用作字节值在您的代码中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。