charの配列に関するD2009の問題-コードを「エレガントに」修正するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/822229

質問

古いバージョンのDelphiプロジェクトをいくつか調べてD2009にアップグレードすると、このバージョンは以前のすべてのリリースに対して大きな改善(Generics.Collections-wow!;)であるため、さまざまな問題が発生します。これは何とか解決できましたが、解決策は考えられるほど半分ほどエレガントではないようです。 (注、私は約3年間Delphiコードを書いていませんし、その当時でさえ、何が起こっているかを深く理解するよりもむしろアマチュアっぽいハッキングでした。)

私のコードにはTFileStreamがあり、そこから読み取ります。ファイルは、以前のDelphiアプリによって、ファイルの最初の3文字が有効であるとファイルタイプを認識するCTRになるように以前に書き込まれました。リーダーは最初の3バイトをchars配列に読み込み(これが問題です。sizeof(char)が2バイトになったため)、この配列を文字列として扱い、「CTR」を読み取るかどうかを確認します。

var ...
buffer: array[0..2] of char;
begin
...
InStream.read(buffer, 3);
if buffer <>'CTR' then begin ShowMessage('Not a valid file!'); exit; end;
...

これはコンパイルされ、機能していましたが、バッファは実際には6バイトの長さであるため、「CTR」とは等しくなりません ever

バッファを array [0..2] of byte に変更することでこれを修正し、次のことを行うためにローカル変数をいくつか導入しました。

for b in buffer do s := s + chr(b); //notice the for..in loop now available in D2009
if s<>'CTR'...

基本的に、個々のバイトを文字列に変換してから比較を行いますが、これを行うにはもっと簡単な方法が必要です。この問題について少し説明していただけますか?

役に立ちましたか?

解決

バッファを

に設定できます
var
  buffer: array[0..2] of AnsiChar;

そして、あなたは以前と全く同じことを読みます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top