1

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

type
  TMyEncrypt = Array of Byte;
  TMyDecrypt = Array of Byte;

function decrypt(original: TMyEncrypt) : TMyDecrypt;

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

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

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

4

1 回答 1

2

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

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

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

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);

同样,我更愿意明确说明编码。而且我可能对我的数据没有以某种方式被空终止有点偏执。

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

于 2014-07-16T21:16:20.637 回答