前段时间我需要将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然后在那里替换它。 ?
无论哪种方式都有用。
答案 0 :(得分:4)
Indy拥有BytesToString()
和ToBytes()
个功能,可在String
和TIdBytes
之间进行转换。如果您使用的是Indy 10.6 +,则IIdTextEncoding
界面会有GetBytes()
和GetString()
重载,需要PByte
个参数,因此您可以使用TBytes
和{{ 1}}数组,无需复制到array of Byte
。