前段时间我需要将字节类型的数组转换为 TBytes,这是在 SO 上的 delphi 大师的帮助下完成的;
具体来说,我需要转换数据,以便我可以提取 UDPServer 在 Indy 10 中的 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,然后我可以通过客户端 UDP SendBuffer 发送此类型。
但是,我需要对它们转发之间的数据做一些修改; 我将 ServerUDPRead 传送的字节数组的第一行读取为一个字符串:
var FirstString: string;
FirstString := PAnsiChar(@AData[0]);
其中AData是字节数组;
现在,我怎样才能进行反向转换,这样我就可以将自己的字符串放入这个 AData 字节数组而不是当前存在的字节数组中,而不修改数组中的任何其他数据,然后将其转换到 TB?
有没有办法把像AData[0]:=PAnsiChar(mystring);
这样的东西(这个当然是错的...)然后用CopyBytes转换成TBytes,或者可能先转换为 TBytes 然后在那里替换它...?
任何一种方式都会有用。
最佳答案
Indy 有 BytesToString()
和 ToBytes()
函数用于在 String
和 TIdBytes
之间进行转换。如果您使用的是 Indy 10.6+,IIdTextEncoding
接口(interface)有 GetBytes()
和 GetString()
重载,需要 PByte
参数,因此您可以使用 TBytes
和 array of Byte
数组,而无需复制到/从 TIdBytes
。
关于arrays - 字节数组到字符串和向后转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22633686/