【问题标题】:Print Hexadecimal Numbers Of a File At C And C++在 C 和 C++ 中打印文件的十六进制数字
【发布时间】:2011-01-01 16:10:06
【问题描述】:

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

我喜欢学习,那么好的教程也很好;-)

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

其他一些问题

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

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

【问题讨论】:

    标签: c++ file-io hex


    【解决方案1】:

    使用od 工具。

    【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      否则有一些源代码见here

      【讨论】:

        【解决方案4】:

        打印十六进制:

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

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

        【讨论】:

        • 您必须将文件读入缓冲区,然后遍历文件的每个字节/字。
        【解决方案5】:

        我建议如下:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-12-25
          • 1970-01-01
          • 2015-02-14
          • 2014-09-18
          • 1970-01-01
          • 1970-01-01
          • 2015-12-16
          • 1970-01-01
          相关资源
          最近更新 更多