将HEX字符转换为TArray <byte>以发送到comm端口

时间:2017-09-18 13:06:08

标签: android delphi serial-port

我最近从ComPort for Android USB Serial获得了Android的通讯端口库。

到目前为止,这使我能够将字符发送到通过OTG电缆连接到设备的LoRa设备。现在我想将配置Hex发送到设备。我能够使用像这样的ComPort Library在VCL中实现目标:

procedure TForm1.btnSendHexClick(Sender: TObject);
var
  S, Str: AnsiString;
begin
  S := 'AFAF0000AF8002020000910D0A';
  Str := HexToString(S);
  ComPort.Write(Str[1], Length(Str));
end;

function TForm1.HexToString(S: String): String;
var
  tmp: AnsiString;
  i: Integer;
begin
  Result:= '';
  for i := 1 to length(S) div 2 do
  begin
    tmp := Copy(S,(i-1)*2+1,2);
    Result := Result + AnsiChar(StrToInt('$'+ tmp));
  end;
end;

现在我想在Android FMX中做同样的事情;

这是我的尝试(不起作用)显然,我对如何完成这些事情的理解太浅了。任何帮助表示赞赏!

procedure TFormMain.btnSendHexClick(Sender: TObject);
var
  Line, Str: String;
  Buffer: TJavaArray<Byte>;
  i: Integer;
begin
  Line := 'AFAF0000AF8002020000910D0A';
  Str := HexToString(Line);
  Buffer := TJavaArray<Byte>.Create(Length(Str));
  i := 0;
  while i < Length(Str) do
  begin
    Buffer[i] := Ord(Str[i]);
    Inc(i);
  end;
  SerialDevice.syncWrite(Buffer, 1000);
end;

function TFormMain.HexToString(const S: String): String;
var
  LOutput: TBytes;
  Len: Integer;
begin
  SetLength(LOutput, Length(S) div 2);
  Len := HexToBin(PChar(S), 0, LOutput, 0, Length(LOutput));
  Result := TEncoding.ASCII.GetString(LOutput, 0, Len);
end;

是的,SerialDevice.syncWrite函数接受TJavaArray<Byte>作为它的第一个参数。第二个参数是超时(毫秒)值。

0 个答案:

没有答案