![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Нужно реализовать запись в файл информация в котором будет хранится в двоичном коде, то есть 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)... |