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

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

Вопрос

Проходя через некоторые из моих старых проектов Delphi и обновляя их до D2009, поскольку я считаю эту версию большим улучшением (Generics.Collections - wow!;)) по сравнению со всеми предыдущими выпусками, я сталкиваюсь с различными проблемами. Это мне удалось решить, но решение кажется не таким элегантным, как мне кажется. (Обратите внимание, я не писал код 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] 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