Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 使用Delphi将十六进制转换为可读字符串_String_Delphi_Hex - Fatal编程技术网

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

String 使用Delphi将十六进制转换为可读字符串,string,delphi,hex,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

我使用组件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,或者至少分析仪是这么说的


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

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

从您的问题中可以明显看出,
str[6]
是答案相关部分的lsb,而
str[7]
持有msb

我是怎么得出这个结论的

1234是
$04D2
hex。最高有效(msb)部分为
$04
,最低有效(lsb)部分为
$D2

将原油转换为管柱可以是:

s := IntToStr(Byte(str[6]) + Word(str[7])*256); // Outputs 1234
首先,将lsb与msb相乘256,形成一个值,然后将其转换为结果字符串



如果您研究了设备的协议描述,所有这些应该会容易得多。当然,供应商提供了这些信息

你能解释一下我们怎么会得到1234这个十六进制值吗?Calc.exe报告1234十进制为$4D2.1234十六进制为$04D2。如果第6对是lsb,第7对是msb,那么您可以计算出其余的。ISTM最后的
0D 0A
可能是CR+LF,但我不知道其他字节的含义。您肯定有协议描述
OD 0A
是CR LF,通常会终止消息。我从分析仪输出中添加了一张图片,我现在将尝试,但供应商没有提供有关该设备的任何信息,甚至我也必须用调试器来发现波特率。@MartinOcandoCorleone那么,如果你不知道这个设备是如何通信的,你希望如何与它交互?你需要这些信息。供应商必须打算让设备与某个设备通信,否则它将没有COM端口连接。所以某个地方一定有人记录了设备的通信协议是如何工作的。雷米,支持部门没有回复我的电子邮件,我必须自己去了解它是如何工作的,而不是那里的文档,直到现在我已经有了足够的信息来了解它是如何工作的,多亏了鲁,现在我可以很好地解码它了