前一段时间,我需要将字节类型的数组转换为TBytes,这是在SO上的delphi大师的帮助下完成的。
具体来说,我需要转换数据,以便提取Indy 10中ServerUDPRead上的UDPServer给我的内容。
此函数由@David Heffernan制作,并发布在以下主题上:tbyte和tidbyte之间的Delphi XE3 indy兼容性问题
所以,我正在使用
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,然后我可以通过客户端UDP SendBuffer发送此类型。
但是,我需要对它们之间转发的数据进行一些修改;我用以下命令将ServerUDPRead传递的字节数组的第一行读取到一个字符串中:
var FirstString: string; FirstString := PAnsiChar(@AData[0]);
其中AData是字节数组;
现在,如何进行反向转换,以便可以将自己的字符串放入此AData字节数组中,而不是当前所在的字节数组中,但又不修改数组内部的任何其他数据,然后将其转换为TBytes?
有没有办法放置类似的东西AData[0]:=PAnsiChar(mystring);
(这当然是错误的...),然后将其与CopyBytes转换为TBytes,或者也许先转换为TBytes,然后在其中替换...?
两种方式都将是有用的。
Indy具有BytesToString()
和ToBytes()
函数,用于在String
和之间进行转换TIdBytes
。而且,如果您使用的是Indy 10.6+,则该IIdTextEncoding
接口具有GetBytes()
和GetString()
重载带有PByte
参数,因此您可以使用TBytes
and array of Byte
数组,而不必复制到/从TIdBytes
。