How to use HextoBin in Delphi Firemonkey for Android

寵の児 提交于 2019-12-12 04:38:36

问题


I'm trying to adopt some Windows code to Android, but I am unsuccessful.

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

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

回答1:


For Android you have to use one of these overloads:

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.

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


来源:https://stackoverflow.com/questions/42962063/how-to-use-hextobin-in-delphi-firemonkey-for-android

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!