我正在使用组件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 ?
答案 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以形成一个值,然后将其转换为结果字符串。
如果您研究了设备的协议说明,那么所有这些都应该更容易。供应商肯定会提供这些信息。