如何在 delphi 中发送多个十六进制代码? 比如我需要发到串口的16进制码是1B和40,怎么发到串口?我已经可以将十六进制代码发送到串行端口,但只有一个十六进制代码,如 1B,我很难发送多个十六进制代码。提前致谢。
我的代码:
unit uSample;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
FMX.Controls.Presentation, FMX.ScrollBox, FMX.Memo, Winsoft.Android.ComPort,
FMX.Edit, FMX.StdCtrls;
type
TForm1 = class(TForm)
AComPort1: TAComPort;
Memo1: TMemo;
Timer1: TTimer;
Button1: TButton;
Edit1: TEdit;
Open: TButton;
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure OpenClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
procedure TForm1.Button1Click(Sender: TObject);
begin
AComPort1.Active := False;
AComPort1.DeviceName := Edit1.Text;
AComPort1.Active := True;
AComPort1.WriteUtf8(Memo1.Text);
AComPort1.WriteByte(Byte($0A));
end;
procedure TForm1.OpenClick(Sender: TObject);
begin
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var Text: string;
begin
end;
end.
最佳答案
根据评论,该组件包含一个具有以下签名的方法:
procedure Write(Buffer: Pointer; Count: Integer; WaitForCompletion: Boolean);
这可能是所有其他写入方法通过的低级方法。您可以使用接受字节数组的高级方法将其包装起来:
procedure TForm1.WriteBytes(const Buffer: array of Byte);
begin
if Length(Buffer) > 0 then begin
AComPort1.Write(@Buffer[0], Length(Buffer), True);
end;
end;
我假设您将为最终参数传递 True
并使调用同步。
然后您可以像这样调用该方法:
WriteBytes([$1B, $40]);
如果您对类助手感到满意,您可以添加这样一个方法作为 TComport
的类助手。
请注意,关于十六进制到底是什么的问题存在一些混淆。您没有尝试向设备发送十六进制。十六进制是值的表示。这些值同样可以表示为十进制。所以上面的代码等价于:
WriteBytes([27, 64]);
十六进制只是记下数字的多种方式之一。基础值(value)是相同的。所以,16 = $0A
。您可以将值写为十进制、十六进制或其他表示形式。您不是在发送十六进制,而是在发送字节。通俗地说,您正在发送二进制数据。
关于android - 在delphi中发送多个十六进制代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35981873/