Проходя через некоторые из моих старых проектов 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'...
Так что, в основном, я превращаю отдельные байты в строку, а затем выполняю сравнение, но должен быть более простой способ сделать это. Не могли бы вы пролить свет на этот вопрос?