简体   繁体   English

如何在Android版Delphi Firemonkey中使用HextoBin

[英]How to use HextoBin in Delphi Firemonkey for Android

I'm trying to adopt some Windows code to Android, but I am unsuccessful. 我正在尝试将某些Windows代码应用于Android,但未成功。

When I try to compile the following code, I get an error: 当我尝试编译以下代码时,出现错误:

[DCC Error] There is no overloaded version of 'HexToBin' that can be called with these arguments [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);

For Android you have to use one of these overloads: 对于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;

You can best achieve this by using a TBytesStream instead of a TMemoryStream. 您最好使用TBytesStream而不是TMemoryStream来实现。

A valid call could then look like this: 一个有效的呼叫可能看起来像这样:

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);
  ...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM