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

TBytesバイトの動的配列を保持するために使用される標準型であることに注意してください。互換性の理由から、 を使用するのが理にかなっていますTBytes。そうすれば、データを他の RTL およびライブラリ コードで処理できます。を使用してすぐに利用できるという事実TEncoding

SetString私の答えが最初に示唆したように、あなたは使用できます:

var
  Text: string;
  Bytes: TBytes;
  StringList: TStringList;
....
SetString(Text, PChar(Bytes), Length(Bytes) div SizeOf(Char)));
StringList.Text := Text;

TEncoding使用されているエンコーディングについて非常に明示的であるため、個人的には使用することを好みます。

テキストが null で終了している場合は、次を使用できます。

StringList.Text := PChar(Bytes);

繰り返しますが、エンコーディングについては明示したいと思います。そして、私は自分のデータがどういうわけかnullで終了していないことに少し偏執的かもしれません。

UTF-8 は UTF-16 よりも効率的な表現であることに気付くかもしれません。

于 2014-07-16T21:16:20.637 に答える