Найти в Дзене
Junior Coder

Программа для чтения Hex кода своими руками.

Каждому пользователю, который хоть немного занимается программированием, бывает необходимо прочитать машинный код какого либо текста или файла. В этом вам может помочь предлогаемая мною программа. Это, конечно, не HEX-редактор, но уже маленький шажок к нему. /* C++ ReadHex.cpp Autor: Ruslan Imangulov 04.01.2022*/ //это начало кода (знак решетки) include <iostream>//подключаем необходимые библиотеки (знак решетки) include <fstream>//для открытия файла (знак решетки) include <cstdlib>//для system (знак решетки) include <iomanip>//для setfill и setw (знак решетки) include <windows.h>//для оконных функций (знак решетки) include <stdio.h>//для printf using namespace std;//загружаем пространство имен std int showNumbLine(int); int main() {   setlocale(LC_ALL,".OCP");//для правильного отображения кириллицы   HWND hwnd = GetConsoleWindow();//получаем хэндл текущего окна   ShowWindow(hwnd, SW_SHOWMAXIMIZED);//разворачиваем консоль   system("color 0a");//меняем цвет текста на ярко-зеленый

Каждому пользователю, который хоть немного занимается программированием,

бывает необходимо прочитать машинный код какого либо текста или файла.

В этом вам может помочь предлогаемая мною программа. Это, конечно, не

HEX-редактор, но уже маленький шажок к нему.

/* C++

ReadHex.cpp

Autor: Ruslan Imangulov 04.01.2022*/

//это начало кода

(знак решетки) include <iostream>//подключаем необходимые библиотеки

(знак решетки) include <fstream>//для открытия файла

(знак решетки) include <cstdlib>//для system

(знак решетки) include <iomanip>//для setfill и setw

(знак решетки) include <windows.h>//для оконных функций

(знак решетки) include <stdio.h>//для printf

using namespace std;//загружаем пространство имен std

int showNumbLine(int);

int main()

{

  setlocale(LC_ALL,".OCP");//для правильного отображения кириллицы

  HWND hwnd = GetConsoleWindow();//получаем хэндл текущего окна

  ShowWindow(hwnd, SW_SHOWMAXIMIZED);//разворачиваем консоль

  system("color 0a");//меняем цвет текста на ярко-зеленый

  char workFile[80], curr_dir[MAX_PATH], s, str[15];//объявляем переменные

  wcout << "Введите, пожалуйста, имя и расширение файла \n";

  wcout << "Пример: \"my_file.txt\" \n";

  wcout << "Файл должен находится в текущей директории: ";

  cin >> workFile;

  GetCurrentDirectory(sizeof(curr_dir), curr_dir);//получаем текущую директорию

  lstrcat(curr_dir, "\\");

  lstrcat(curr_dir, workFile);//добавляем к ней имя файла

  system("cls");//очищаем экран

  wcout << "Рабочий файл: \"" << curr_dir << "\""<< endl;//на всякий случай

                      //напоминаем себе с каким файлом работаем

  cout.width(80);//для красоты

  cout.fill('-');// подчеркиваем надпись

  cout << " \n";//вывод с новой строки

  ifstream av;// объявляем входящий поток

  av.open(curr_dir);//открываем файл для чтения

  int i = 0, b = 0;//эти числовые переменные нам тоже понадобятся

  showNumbLine(b);//пишем номер первой строки

  while(av.get(s))//открываем цикл

  {

    if(int(s)<15)//если значение меньше 15

    cout << '0';//пишем перед ним ноль

    printf("%x",s);//выводим само значение в шестнадцатиричном виде

    str[i] = s;//и сохроняем его в другой переменной

    cout << " ";//пробел

    if(i == 7)// если i достигла 7

    {

      cout << " ";//печатаем пробел

    }

    i++;//увеличиваем i на 1

    if(i == 16)// если i равно 16

    {

      for(int f = 0; f<= 15; f++)// выводим текстовые значения

      {

        if(f == 0)

        cout << " | ";

        if(char (str[f]) < 33)//управляющие символы ASCII заменяем на

        str[f] = '.';//точку, т.к., они неправильно отображаются

        wcout << str[f];

      }

      cout << " \n";//новая строка

      i = 0;//сбрасываем i на ноль

      b++;

      showNumbLine(b);//пишем номер следующей строки

    }

    Sleep(50);//устанавливаем задержку на 50 миллисекунд

    if(av.eof())//если мы достигли конца файла

    break;//разрываем цикл

  }

  av.close();//и закрываем поток

  return 0;

}

int showNumbLine(int i)// функция нумерации строк

{

  cout << "0x";

  cout << setw(8) << setfill('0') << hex << i << " ";//setw устанавливает

}    //ширину вывода, а setfill заполняет пустые ячейки нулями

//это конец кода