0

以前のバージョンのDelphiでは、次のコードがあります。

   var InBuf: array[1..45] of Byte;

   Count := InStream.Read(InBuf, SizeOf(InBuf));

変数InBufに正しい値を入力しました(すべてのバイトに値がありました)。Delphi XEでは、配列の1つおきのバイトが0です。これは、Delphi XEでのUnicodeの性質により、バイトデータ型が2倍大きいためだと思います。しかし、私のストリームはすでに生成されており、この手順を通過する必要があるため、誰かがこの問題に直面した場合は、バイトの半分のサイズの別のタイプ(多分?)または別のソリューションが必要です。ありがとう

4

1 に答える 1

7

ここで起こったことは、99%を超える確率で、文字列変数からストリームを書き込んだことです。UTF-16エンコーディングのUnicode文字列は1文字あたり2バイトですが、古いバージョンのDelphiは1文字あたり1バイトのANSIエンコーディングを使用しています。

英語のテキストは、UTF-16でエンコードすると、1バイトおきにゼロになるパターンが見られます。

これを解決するには、ストリームに書き込むコードのセクションを調査する必要があります。

于 2011-07-21T07:56:30.463 に答える