Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Синтаксис
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.12.2006, 21:25
Alexius Alexius вне форума
Прохожий
 
Регистрация: 29.12.2006
Сообщения: 3
Репутация: 10
По умолчанию Нетипизированный или 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  
Старый 29.12.2006, 22:04
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

Если я правильно понял твою глубокую мысль, то попробуй так
Код:
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  
Старый 01.01.2007, 21:58
Alexius Alexius вне форума
Прохожий
 
Регистрация: 29.12.2006
Сообщения: 3
Репутация: 10
По умолчанию

Не работает программа. Выбрасывает ошибку в строке _To[0] := $FF;
Но мне все-таки кажется что понял ты меня не правильно. Файл должен быть именно формата HEX, а у тебя там получается Byte. Он ведь получается хранится в другом формате или нет?
Ответить с цитированием
  #4  
Старый 01.01.2007, 22:59
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

Цитата:
Не работает программа. Выбрасывает ошибку в строке _To[0] := $FF;
Убери строки
FillChar( _Ti, Long, 0 );
FillChar( _To, Long, 0 );
Цитата:
Но мне все-таки кажется что понял ты меня не правильно. Файл должен быть именно формата HEX, а у тебя там получается Byte. Он ведь получается хранится в другом формате или нет?
Тогда объясни, что значит в HEX формате? У любого символа есть код, например для 'f' это 102 (в десятичной форме). Но его можно показать и в HEX (66), и в BIN (01100110), и в OCT (146) и в любой другой...

В твоем примере переменная To имеет тип string, и ты ей присваиваешь 'FF' (To:='FF'), после чего записываешь To в файл. Если ты хочешь, чтобы в файле после этого было 'FF' (то-есть, что записал, то и увидел), то работай с файлом как с обычным текстовым...
Ответить с цитированием
  #5  
Старый 04.01.2007, 19:29
Alexius Alexius вне форума
Прохожий
 
Регистрация: 29.12.2006
Сообщения: 3
Репутация: 10
По умолчанию

Чувак респект, похоже я начинаю догонять, что означает нижнее подчеркивание в переменных и символ доллара?
Ответить с цитированием
  #6  
Старый 04.01.2007, 23:02
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

Нижнее подчеркивание (_) - ничего оно не значит... Просто переменную To объявить нельзя, т.к. в Delphi это зарегистрированное слово (в цикле for). Вот я и поставил впереди подчеркивание...

Символ доллара ($) - означает, что за ним идет число в шестнадцатиричном формате ($FF = 255)...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 05:04.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter