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

发布于 2024-08-16 10:56:50 字数 334 浏览 7 评论 0原文

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

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

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

其他一些问题

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

我已经掌握了 C++ 的方法,但是如何在 C 中实现呢?

I'm now developing a home project, but before I start, I need to know how can I printcout the content of a file(*.bin as example) in hexadecimal?

I like to learn, then a good tutorial is very nice too ;-)

Remember that I need to develop this, without using external applications, because this home project is to learn more about hexadecimal manipulating on C++ and also a good practice of my knowledge.

Some other questions

  • Is there any way to do this using C?
  • How can I store this value into a variable?

I already got the way in C++, but how to make it in C?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

独享拥抱 2024-08-23 10:56:50

要打印十六进制:

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

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

To print hex:

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

but yes, use the od tool :-)
A good file reading/writing tutorial is here. You will have to read the file into a buffer then loop over each byte/word of the file.

风蛊 2024-08-23 10:56:50

使用 od 工具。

Use the od tool.

青萝楚歌 2024-08-23 10:56:50

另一个不错的十六进制转储工具是 xxd 也可以输出到 C 数组。

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

Another good hexdump tool is xxd which also can output to a C array.

Otherwise to have some source code see here

染火枫林 2024-08-23 10:56:50

我建议如下:

  1. 将数据输入为 unsigned char
  2. 将数据打印为[文件偏移量]
    [byte1] ...[byte16] [可打印
    字符]

如果该字符不可打印,请使用“.”。检查isprint 函数。

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

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

  1. 使用 unsigned int块读取缓冲区
  2. 并进行处理
    一次超过一个字节。

这是一个可以帮助您的模板:

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

I suggest the following:

  1. Input the data as unsigned char.
  2. Print the data as [file offset]
    [byte1] ...[byte16] [printable
    character]

If the character is not printable, use '.'. Check the isprint function.

Start your program by reading one byte at a time. Get this working.

Afterwards, you can make it more efficient by:

  1. using block reads into a buffer
  2. using unsigned int and processing
    more than one byte at a time.

Here is a stencil to help you out:

#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;
}
梦纸 2024-08-23 10:56:50

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

If you have Visual Studio, you can open any file as binary data. You'll see its hex representation right away.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文