在C和C ++中打印文件的十六进制数

时间:2010-01-05 14:31:17

标签: c++ file-io hex

我现在正在开发一个家庭项目,但在开始之前,我需要知道如何打印 cout 文件的内容(* .bin as example)in十六进制?

我喜欢学习,然后一个好的教程也非常好; - )

请记住,我需要在不使用外部应用程序的情况下开发它,因为这个家庭项目是要学习更多关于C ++的十六进制操作以及我的知识的良好实践。

其他一些问题

  • 有没有办法用C?
  • 这样做
  • 如何将此值存储到变量中?

我已经在C ++中找到了方法,但是如何在C中实现呢?

5 个答案:

答案 0 :(得分:6)

要打印十六进制:

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

但是,请使用od工具: - )
一个好的文件读/写教程是here。您必须将文件读入缓冲区,然后循环遍历文件的每个字节/字。

答案 1 :(得分:4)

使用od工具。

答案 2 :(得分:2)

另一个好的hexdump工具是xxd,它也可以输出到C数组。

否则要获得一些源代码,请参阅here

答案 3 :(得分:2)

我建议如下:

  1. 输入数据为unsigned char
  2. 将数据打印为[文件偏移] [byte1] ... [byte16] [可打印 字符]
  3. 如果角色不可打印,请使用“。”。检查isprint功能。

    通过一次读取一个字节来启动程序。让这个工作。

    之后,您可以通过以下方式提高效率:

    1. 使用块读入缓冲区
    2. 使用unsigned int并进行处理 一次超过一个字节。
    3. 这是一个可以帮助你的模板:

      #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;
      }
      

答案 4 :(得分:-1)

如果您有Visual Studio,则可以将任何文件作为二进制数据打开。您将立即看到它的十六进制表示。