|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Нетипизированный или Hex файл
Нужно реализовать запись в файл информация в котором будет хранится в двоичном коде, то есть bin файл. Реализовать это нужно так что бы записывалась HEX последовательность - 1 байт - NNh. Для этого был выбран нетипизированный файл. То есть "File1: File;"
как указано в примере использовалась процедура BlockWrite(); Все на первый взгляд работает, но на самом деле в этот файл записывается нечто другое, а именно абсолютно не те байты, что нужно. Хотя при обратном считывании данные идентичны с записываемыми. Похоже не корректно работает BlockWrite(); Задача состоит в том что бы записывалось все именно в первоначальной HEX последовательности, так как это прошивка для чипа. Помогите разобратся. Далее привожу исходник: Код:
procedure TForm1.Button1Click(Sender: TObject); var f:File; i:Byte; Ti,To:String; begin Ti:=''; To:='FF'; AssignFile(F,'c:\92.bin'); Rewrite(F,1); BlockWrite(F,To,1); CloseFile(F); Reset(F,1); BlockRead(F,Ti,1) CloseFile(F); Label1.Caption:=To; Label2.Caption:=Ti; End; |
#2
|
||||
|
||||
Если я правильно понял твою глубокую мысль, то попробуй так
Код:
procedure TForm1.Button1Click(Sender: TObject); const Long = 3; var f: File of byte; _Ti, _To: array of byte; i: integer; begin SetLength( _Ti, Long ); FillChar( _Ti, Long, 0 ); SetLength( _To, Long ); FillChar( _To, Long, 0 ); _To[0] := $FF; _To[1] := $AA; _To[2] := $54; AssignFile( F, 'c:\92.bin' ); Rewrite( F ); BlockWrite( F, _To[0], Length( _To ) ); CloseFile( F ); Reset( F ); BlockRead( F, _Ti[0], Length( _Ti ) ); CloseFile( F ); Label1.Caption := ''; Label2.Caption := ''; for i := 0 to Long-1 do begin Label1.Caption := Label1.Caption + IntToStr( _To[i] ) + '; '; Label2.Caption := Label2.Caption + IntToStr( _Ti[i] ) + '; '; end; end; |
#3
|
|||
|
|||
Не работает программа. Выбрасывает ошибку в строке _To[0] := $FF;
Но мне все-таки кажется что понял ты меня не правильно. Файл должен быть именно формата HEX, а у тебя там получается Byte. Он ведь получается хранится в другом формате или нет? |
#4
|
||||
|
||||
Цитата:
FillChar( _Ti, Long, 0 ); FillChar( _To, Long, 0 ); Цитата:
В твоем примере переменная To имеет тип string, и ты ей присваиваешь 'FF' (To:='FF'), после чего записываешь To в файл. Если ты хочешь, чтобы в файле после этого было 'FF' (то-есть, что записал, то и увидел), то работай с файлом как с обычным текстовым... |
#5
|
|||
|
|||
Чувак респект, похоже я начинаю догонять, что означает нижнее подчеркивание в переменных и символ доллара?
|
#6
|
||||
|
||||
Нижнее подчеркивание (_) - ничего оно не значит... Просто переменную To объявить нельзя, т.к. в Delphi это зарегистрированное слово (в цикле for). Вот я и поставил впереди подчеркивание...
Символ доллара ($) - означает, что за ним идет число в шестнадцатиричном формате ($FF = 255)... |