AFON//Радиотехник
C++Builder · проект 26/50

HEX-просмотрщик

Байты файла в шестнадцатеричном дампе.

Задача

Показать содержимое файла классическим hex-дампом: смещение, байты и печатные символы.

Компоненты на форме

OpenDialog, Memo (MemoDump), Button (ButtonOpen).

Как работает

  1. Открыть файл потоком TFileStream.
  2. Читать по 16 байт, форматировать hex и ASCII.
  3. Ограничить вывод первыми килобайтами.

Исходный код модуля

//---------------------------------------------------------------------------
// Проект 26. HEX-просмотрщик файла
// Байты файла в шестнадцатеричном дампе.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
}
//---------------------------------------------------------------------------

// Читаем файл в память и печатаем классический hex-дамп: смещение,
// 16 байт в hex и та же строка печатными символами.
AnsiString hexByte(unsigned char b){ return IntToHex((int)b,2); }
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonOpenClick(TObject *Sender)
{
    if (!OpenDialog1->Execute()) return;
    TFileStream *fs = new TFileStream(OpenDialog1->FileName, fmOpenRead);
    MemoDump->Lines->Clear();
    try {
        const int W=16; unsigned char buf[16]; int got, off=0;
        while ((got = fs->Read(buf, W)) > 0){
            AnsiString hex, asc;
            for (int i=0;i<W;i++){
                if (i<got){ hex+=hexByte(buf[i])+" ";
                            asc+=(buf[i]>=32&&buf[i]<127)?(char)buf[i]:'.'; }
                else hex+="   ";
            }
            MemoDump->Lines->Add(IntToHex(off,6)+"  "+hex+" "+asc);
            off+=got;
            if (off>4096){ MemoDump->Lines->Add("... (показаны первые 4 КБ)"); break; }
        }
    }
    __finally { delete fs; }
}
//---------------------------------------------------------------------------

Пояснения

  • Непечатные байты заменяются точкой.
  • TFileStream читает файл блоками, не загружая целиком.
📦 help-user.ru — срочный ремонт компьютеров и восстановление данных в Москве: help-user.ru.

Что дальше

Создайте в C++Builder новый проект, разместите перечисленные компоненты и вставьте код модуля. Остальные 49 программ — в разделе проектов на C++Builder; смотрите также обзор среды и контроллеры AVR.