D2009 проблемы с массивом символов - как я могу "элегантно" исправить мой код? - PullRequest
2 голосов
/ 05 мая 2009

Проходя через некоторые из моих старых проектов Delphi и обновляя их до D2009, так как я нахожу эту версию большим улучшением (Generics.Collections - вау! Это мне удалось решить, но решение кажется не таким элегантным, как мне кажется. (Обратите внимание, я не писал код Delphi около трех лет, и даже тогда это был скорее любительский взлом, чем глубокое понимание того, что происходит).

Мой код будет иметь TFileStream и читать из него. Файлы были написаны ранее моим старым приложением Delphi таким образом, что первые три символа в файле будут CTR, чтобы распознать тип файла как действительный. Читатель будет читать первые три байта в массив символов (и вот проблема, теперь, когда 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' когда-либо .

Я исправил это, изменив буфер на 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'...

Так что, в основном, я превращаю отдельные байты в строку, а затем выполняю сравнение, но должен быть более простой способ сделать это. Не могли бы вы пролить свет на этот вопрос?

1 Ответ

13 голосов
/ 05 мая 2009

Вы можете установить свой буфер на

var
  buffer: array[0..2] of AnsiChar;

и вы будете читать точно так же, как и раньше.

...