【问题标题】:How to use HextoBin in Delphi Firemonkey for Android如何在 Delphi Firemonkey for Android 中使用 HextoBin
【发布时间】:2017-08-15 04:22:09
【问题描述】:

我正在尝试将一些 Windows 代码应用到 Android,但没有成功。

当我尝试编译以下代码时,出现错误:

[DCC 错误] 没有可以使用这些参数调用的 'HexToBin' 的重载版本

var
  BinaryStream: TMemoryStream;
  HexStr: String;
  WSocket: TWSocket;
begin
  HexStr := memo1.Text;
  BinaryStream := TMemoryStream.Create;
  try
    BinaryStream.Size := Length(HexStr) div 2;
    if BinaryStream.Size > 0 then
    begin
      HexToBin(PChar(HexStr), BinaryStream.Memory, BinaryStream.Size);
      HexStr:='';
      HexStr:=MemoryStreamToString(BinaryStream);
      memo1.Text:=HexStr;
      IdUDPClient1.Send(HexStr);

【问题讨论】:

  • 为什么要显示所有其他代码。我们不能只关注无法编译的那一行吗?
  • 为了更好地理解我的代码中发生的事情。因为我不确定所有的编码是否正确。
  • @David Heffernan 抱歉,如果有些事情做得不好,我是新手,不太了解如何正确执行所有操作

标签: android delphi firemonkey indy


【解决方案1】:

对于 Android,您必须使用以下重载之一:

function HexToBin(const Text: PChar; TextOffset: Integer;
  var Buffer: TBytes; BufOffset: Integer; Count: Integer): Integer; overload;

function HexToBin(const Text: TBytes; TextOffset: Integer;
  var Buffer: TBytes; BufOffset: Integer; Count: Integer): Integer; overload;

最好使用 TBytesStream 而不是 TMemoryStream 来实现这一点。

一个有效的调用可能如下所示:

var
  BinaryStream: TBytesStream;
  bytes: TBytes;
  HexStr: String;
begin
  HexStr := memo1.Text;
  SetLength(bytes, Length(HexStr) div 2);
  HexToBin(PWideChar(HexStr), 0, bytes, 0, Length(bytes));
  BinaryStream := TBytesStream.Create(bytes);
  ...

【讨论】:

  • 您能否提供一些示例,无法开始工作((相同的错误 var BinaryStream: TBytesStream; HexaStr:string; Begin BinaryStream := TBytesStream.Create; 尝试 BinaryStream.Size := Length( HexaStr) div 2; 如果 BinaryStream.Size > 0 则 HexToBin(Pwidechar(HexaStr),0, BinaryStream.Memory, 0,BinaryStream.Size);
  • 这也行不通(( var LStr1, LStr2: WideString; begin { 将备忘录中的文本存储到字符串变量中。} LStr1 := Memo2.Lines.Text; { 设置长度保存转换的字符串。 } SetLength(LStr2, Length(LStr1) div 4); { 调用十六进制到二进制的转换过程。 } HexToBin(PWideChar(LStr1), LStr2[1], Length(LStr1) div SizeOf( Char)); { 将结果输出到 Memo1。 } Memo1.Lines.Text := LStr2;
  • @AKYLA,我为通话添加了一个示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-26
  • 1970-01-01
  • 2019-12-20
  • 2017-07-15
  • 2017-11-06
  • 1970-01-01
  • 2014-01-18
相关资源
最近更新 更多