使用Delphi将十六进制转换为人类可读的字符串

时间:2018-03-15 22:41:40

标签: string delphi hex

我正在使用组件TComPort通过带有Delphi Berlin 10.1的COM端口读取/写入RFID读取器设备

这是我编写命令的方式:

procedure TForm1.Button4Click(Sender: TObject);
begin
  ComPort1.WriteStr(#$5A#$FE#$01#$00#$0D#$0A);
end;

这是我从设备读取响应的方式:

procedure TForm1.ComDataPacket1Packet(Sender: TObject; const Str: string);
var
  str2:String;
  I:Integer;
begin
  for I:=1 to length(str) do
    begin
      str2 := str2+IntToHex(Byte(str[I]),2)+' ';
    end;
  memo1.lines.add(str2);
end;

回复 D5 D5 03 00 82 D2 04 58 01 0D 0A

我认为这意味着 1234 或者至少是分析师所说的 enter image description here

但是,如何将十六进制转换为人类可读的字符串,如 1234

1 个答案:

答案 0 :(得分:2)

响应为:D5 D5 03 00 82 D2 04 58 01 0D 0A

从你的问题看来很明显str[6]是答案相关部分的lsb而str[7]持有msb。

  

我是如何得出这个结论的?

1234是$04D2十六进制。最重要的(msb)部分是$04,最不重要的(lsb)部分是$D2

原始转换为字符串可以是:

s := IntToStr(Byte(str[6]) + Word(str[7])*256); // Outputs 1234

首先,将lsb添加到msb乘以256以形成一个值,然后将其转换为结果字符串。

如果您研究了设备的协议说明,那么所有这些都应该更容易。供应商肯定会提供这些信息。