Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Считать двоичный файл и отобразить значение байт как ASCII

Delphi , Файловая система , Файлы

Считать двоичный файл и отобразить значение байт как ASCII

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

type
   TDisplayProc = procedure(const s: string) of object;

 procedure ShowBinary(var Data; Count: Cardinal; DispProc: TDisplayProc);

 implementation


 procedure ShowBinary(var Data; Count: Cardinal; DispProc: TDisplayProc);
 var
   line: string[80];
   i: Cardinal;
   p: PChar;
   nStr: string[4];
 const
   posStart = 1;
   binStart = 7;
   ascStart = 57;
   HexChars: PChar = '0123456789ABCDEF';
 begin
   p    := @Data;
   line := '';
   for i := 0 to Count - 1 do
   begin
     if (i mod 16) = 0 then
     begin
       if Length(line) > 0 then
         DispProc(line);
       FillChar(line, SizeOf(line), ' ');
       line[0] := Chr(72);
       nStr    := Format('%4.4X', [i]);
       Move(nStr[1], line[posStart], Length(nStr));
       line[posStart + 4] := ':';
     end;
     if p[i] >= ' ' then
       line[i mod 16 + ascStart] := p[i]
     else
       line[i mod 16 + ascStart] := '.';
     line[binStart + 3 * (i mod 16)]     := HexChars[(Ord(p[i]) shr 4) and $F];
     line[binStart + 3 * (i mod 16) + 1] := HexChars[Ord(p[i]) and $F];
   end;
   DispProc(line);
 end;


 procedure TForm1.Display(const S: string);
 begin
   Memo1.Lines.Add(S);
 end;

 procedure TForm1.Button1Click(Sender: TObject);
 var
   ms: TMemoryStream;
 begin
   if Opendialog1.Execute then
   begin
     ms := TMemoryStream.Create;
     try
       ms.LoadFromfile(OpenDialog1.FileName);
       ShowBinary(ms.Memory^, ms.Size, Display);
     finally
       ms.Free
     end;
   end;
 end;

Программа на Delphi, которая читает бинарный файл и отображает его содержимое в виде ASCII-символов. Вот подробное описание кода:

Процедура ShowBinary

Эта процедура принимает три параметра: Data, Count и DispProc. Она проходит по буферу Data, отображая каждый байт как ASCII-символ или точку (.) если он не печатаемый.

Вот что она делает в более подробном виде:

  1. Инициализирует переменные: line - строковый буфер для хранения вывода, i - счетчик, p - указатель на буфер Data, а nStr - временная строка.
  2. Проходит по каждому байту буфера Data (до Count байт).
  3. Если текущий байт является началом новой строки (i mod 16 = 0), она сбрасывает буфер line и заполняет его заголовком, содержащим offset байта, двоеточие (:) и пробел.
  4. Для каждого байта она проверяет, является ли он печатаемым (т.е., не является контрольным символом). Если да, добавляет ASCII-символ в буфер line на соответствующей позиции.
  5. В противном случае добавляет точку (.) в буфер line.
  6. Также конвертирует байт в шестнадцатеричное представление и добавляет его в буфер line.
  7. После обработки всех байт вызывает процедуру DispProc для отображения финального вывода.

Процедура Display

Это простая процедура, которая принимает строку как входной параметр и добавляет ее к контроллу мемо (Memo1) на форме.

Событийный обработчик Button1Click

Этот событийный обработчик обрабатывает клик событие кнопки на форме. Когда она нажата, программа:

  1. Открывает диалоговое окно для выбора файла с помощью OpenDialog1 и позволяет пользователю выбрать бинарный файл.
  2. Создает объект TMemoryStream для чтения выбранного файла.
  3. Загружает содержимое файла в память.
  4. Вызывает процедуру ShowBinary с данными памяти, ее размером и процедурой Display как обработчиками вывода.

В целом, эта программа предназначена для отображения бинарных файлов в формате, который легко читаем и анализируют.

В статье описана процедура чтения двоичного файла и отображения значения байта в виде ASCII-символов с помощью делифовской программы на языке Pascal.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Файлы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:28:22/0.0058012008666992/1