Печать шестнадцатеричных номеров файлов на C и C ++ - PullRequest
2 голосов
/ 05 января 2010

Сейчас я разрабатываю домашний проект, но перед тем, как начать, мне нужно знать, как напечатать cout содержимое файла (например, *. Bin) в шестнадцатеричном формате?

Мне нравится учиться, тогда хороший учебник тоже очень хорош ; -)

Помните, что мне нужно разработать это, не используя внешние приложения, потому что этот домашний проект должен больше узнать о шестнадцатеричном манипулировании на C ++, а также о хорошей практике моих знаний.

Некоторые другие вопросы

  • Есть ли способ сделать это с помощью C?
  • Как я могу сохранить это значение в переменной?

Я уже получил путь в C ++, но как сделать это в C?

Ответы [ 5 ]

6 голосов
/ 05 января 2010

Для печати в шестнадцатеричном виде:

std::cout << std::hex << 123 << std::endl;

но да, используйте инструмент od : -)
Хорошее руководство по чтению / записи файлов: здесь . Вам нужно будет прочитать файл в буфер, а затем перебрать каждый байт / слово файла.

4 голосов
/ 05 января 2010

Используйте инструмент od .

2 голосов
/ 05 января 2010

Я предлагаю следующее:

  1. Введите данные как unsigned char.
  2. Распечатать данные как [смещение файла] [byte1] ... [byte16] [для печати символ]

Если символ не может быть напечатан, используйте «.». Проверьте функцию isprint.

Запустите вашу программу, читая по одному байту за раз. Получите это работает.

После этого вы можете сделать его более эффективным:

  1. использование чтения блока в буфер
  2. с использованием unsigned int и обработкой более одного байта за раз.

Вот трафарет, чтобы помочь вам:

#include <iostream>
#include <fstream>
#include <cstdlib>

int
main(int num_parameters, char * argument_list[])
{
  std::string    filename("my_program.cpp");
  std::ifstream  inp_file(filename.c_str(), ios::binary);
  if (!inp_file)
  {
     std::cerr << "Error opening test file: " << filename << "\n";
     return EXIT_FAILURE;
  }
  unsigned char  inp_byte;
  while (inp_file >> inp_byte)
  {
    // *your code goes here*
  }
  inp_file.close();
  return EXIT_SUCCESS;
}
2 голосов
/ 05 января 2010

Другим хорошим инструментом hexdump является xxd, который также может выводить в массив C.

В противном случае для получения исходного кода см. здесь

0 голосов
/ 05 января 2010

Если у вас есть Visual Studio, вы можете открыть любой файл в виде двоичных данных.Вы сразу увидите его шестнадцатеричное представление.

...