字符串到字符串和向后转换的数组

时间:2014-03-25 11:49:12

标签: arrays delphi indy

前段时间我需要将Byte类型的数组转换为TBytes,这是在这里的delphi专家的帮助下完成的;

具体来说,我需要转换数据,以便我可以在Indy 10中提取UDPServer给我的ServerUDPRead。

此功能由@David Heffernan制作,发布于此主题:Delphi XE3 indy compatibility issue between tbytes and tidbytes

所以,我正在使用

function CopyBytes(const Bytes: array of Byte): TBytes;
var
  Count: Integer;
begin
  Count := Length(Bytes);
  SetLength(Result, Count);
  if Count > 0 then
    Move(Bytes[0], Result[0], Length(Bytes));
end;

将其转换为TBytes,然后我可以通过Client UDP SendBuffer发送此类型。

但是,我需要对它们之间的数据进行一些修改; 我将ServerUDPRead提供的第一行字节数字读取到一个字符串:

var FirstString: string;

FirstString := PAnsiChar(@AData[0]);

其中AData是字节数组;

现在,我怎么能进行反向转换,这样我就可以将自己的字符串放到这个字节的AData数组而不是当前那个字节,但不修改数组内的任何其他数据,然后转换它对TBytes?

有没有办法放置像AData[0]:=PAnsiChar(mystring);这样的东西(这个当然是错的......)然后用CopyBytes转换为TBytes,或者先转换为TBytes然后在那里替换它。 ?

无论哪种方式都有用。

1 个答案:

答案 0 :(得分:4)

Indy拥有BytesToString()ToBytes()个功能,可在StringTIdBytes之间进行转换。如果您使用的是Indy 10.6 +,则IIdTextEncoding界面会有GetBytes()GetString()重载,需要PByte个参数,因此您可以使用TBytes和{{ 1}}数组,无需复制到array of Byte