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

标签 arrays delphi indy

前段时间我需要将字节类型的数组转换为 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() 函数用于在 StringTIdBytes 之间进行转换。如果您使用的是 Indy 10.6+,IIdTextEncoding 接口(interface)有 GetBytes()GetString() 重载,需要 PByte 参数,因此您可以使用 TBytesarray of Byte 数组,而无需复制到/从 TIdBytes

关于arrays - 字节数组到字符串和向后转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22633686/

相关文章:

delphi - Indy 的强大单向消息

delphi - Indy IMAP4 通过 SSL

c - 在不使用循环的情况下将char *转换为C中的大写

delphi - 在 Delphi XE2 TActionMainMenubar 中显示提示

delphi - 我找到了 ComClass,现在如何引用它?

delphi - 检查Delphi WSDL界面中是否存在值

delphi - IdTcp服务器崩溃

java - 如何聚合 mongodB 集合中所有文档的映射键?

javascript - 圆环饼图中数据标签的自定义 CSS 类

php - 获取数组中的订单数据以在 Woocommerce 中对其进行 JSON 编码