Delphi(XE6):Byte到TStringList的数组

时间:2014-07-16 21:05:47

标签: arrays delphi type-conversion delphi-xe6 tstringlist

我有一个返回动态字节数组

的函数
type
  TMyEncrypt = Array of Byte;
  TMyDecrypt = Array of Byte;

function decrypt(original: TMyEncrypt) : TMyDecrypt;

返回的动态数组TMyDecrypt的内容是带有CRLF的标准文本。

如何将此加载到带有CRLF作为分隔符的TStringList中,而不将其保存到临时文件中?

编辑:重新编译的字节数组包含unicode编码字符

1 个答案:

答案 0 :(得分:2)

将字节数组解码为字符串,然后分配给字符串列表的Text属性。

var
  Bytes: TBytes;
  StringList: TStringList;
....
StringList.Text := TEncoding.Unicode.GetString(Bytes);

请注意TBytes的使用,TBytes是用于保存动态字节数组的标准类型。出于兼容性原因,使用TEncoding是有意义的。这样,您的数据可以由其他RTL和库代码处理。我们通过使用SetString立即利用这一事实。

您可以使用var Text: string; Bytes: TBytes; StringList: TStringList; .... SetString(Text, PChar(Bytes), Length(Bytes) div SizeOf(Char))); StringList.Text := Text; ,我的回答最初建议:

TEncoding

我个人更喜欢使用StringList.Text := PChar(Bytes); ,因为它非常明确地使用了编码。

如果您的文本以空值终止,那么您可以使用:

{{1}}

同样,我更喜欢明确编码。而且我可能对我的数据有点偏执,不知何故不会被终止。

您可能会发现UTF-8比UTF-16更有效。