【发布时间】:2025-12-17 19:20:04
【问题描述】:
我需要从二进制文件中读取 16 位为std::string 或char *。例如,一个二进制文件包含89 ab cd ef,我希望能够将它们提取为std::strings 或char *。我试过以下代码:
ifstream *p = new ifstream();
char *buffer;
p->seekg(address, ios::beg);
buffer = new char[16];
memset(buffer, 0, 16);
p->read(buffer, 16);
当我尝试std::cout 缓冲区时,什么也没出现。如何读取二进制文件中的这些字符?
编辑:我正在寻找一个 int 类型的缓冲区,例如“0x89abcdef”。有没有可能实现?
【问题讨论】:
-
这段代码执行时
address的值是多少? -
你打开文件了吗?此外,在堆栈上声明
*p可能是一个更好的主意:ifstream p("somefile.txt"); -
您希望在缓冲区中获得什么?您是否希望它包含四个字节,其值分别为 0x89、0xAB、0xCD、0xEF?或者您是否尝试获取这些值的一些文本表示形式(例如,
"89 ab cd ef"之类的字符串)? -
如果您在 Linux 中,您可以使用
strings bin_file_path从二进制文件中获取所有字符串的列表 -
当您尝试从文件中读取数据时,您应该始终检查尝试是否成功。例如,当
ifstream::read未能读取您要求的尽可能多的字节时,它会在流对象上设置一些标志,您可以使用ifstream::fail和ifstream::eof进行检查。
标签: c++ filestream binaryfiles