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

Posted

技术标签:

【中文标题】字节数组到字符串和向后转换【英文标题】:array of Byte to string and backwards conversion 【发布时间】:2014-05-03 05:50:06 【问题描述】:

前段时间我需要将 Array of Byte 类型转换为 TBytes,这是在 delphi 大师的帮助下完成的;

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

此功能由@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 字节数组而不是当前存在的字节数组,但不修改数组内的任何其他数据,然后转换它到 TBytes?

有没有办法把AData[0]:=PAnsiChar(mystring); 之类的东西(当然这是错误的......)然后用 CopyBytes 转换为 TBytes,或者可能先转换为 TBytes 然后在那里替换它......?

无论哪种方式都会有用。

【问题讨论】:

您可以在任何步骤中修改其中的任何部分。我有点不清楚您要进行哪些修改。您只是想将一些字节复制到字节数组中吗? 实际上,FirstString 需要更改;所以,我想更改/替换字节数组中的一些字节,是的。 您可以为此使用Move,就像您问题中的CopyBytes 函数中显示的那样 【参考方案1】:

Indy 具有 BytesToString()ToBytes() 函数,用于在 StringTIdBytes 之间进行转换。如果您使用的是 Indy 10.6+,IIdTextEncoding 接口有 GetBytes()GetString() 重载,它们采用 PByte 参数,因此您可以使用 TBytesarray of Byte 数组而无需复制到/从 @ 987654331@.

【讨论】:

以上是关于字节数组到字符串和向后转换的主要内容,如果未能解决你的问题,请参考以下文章

Delphi字节转换字节数组

将字符串数组转换为字节数组

字节数组字符串到字节数组? [复制]

将范围为 -128 到 127 的字节数组转换为字符串数组

错误 1075:从 UDF 接收到一个字节数组。无法确定如何将字节数组转换为字符串

如何将字节数组的字符串转换为字节数组