将二进制文件内容读入std::string
时间: 2023-09-10 22:07:15 浏览: 136
可以使用C++的文件流来读取二进制文件内容,并将其存储到std::string中。以下是一个示例代码:
```cpp
#include <fstream>
#include <string>
int main() {
std::ifstream file("binary_file", std::ios::binary);
if (file) {
// 获取文件大小
file.seekg(0, std::ios::end);
std::streamsize size = file.tellg();
file.seekg(0, std::ios::beg);
// 读取文件内容
std::string content(size, 0);
file.read(&content[0], size);
// 输出文件内容
std::cout << content << std::endl;
}
return 0;
}
```
在上面的代码中,我们使用std::ifstream打开了一个二进制文件,并将打开模式设置为std::ios::binary。然后,我们使用file.seekg函数获取文件的大小,并将文件指针移到文件末尾。接着,我们使用std::string的构造函数创建了一个长度为文件大小的字符串,并使用file.read函数将文件内容读入该字符串中。最后,我们输出了该字符串。
相关问题
std::string contents((std::istreambuf_iterator<char>(in)), std::istreambuf_iterator<char>());
这段代码是用来读取一个文件的全部内容并存储到一个字符串中。
具体实现是通过一个 std::istreambuf_iterator 对象,将文件输入流 in 的内容逐个字符读入,并通过 std::string 构造函数将其存储到字符串 contents 中。
这里使用了两个 std::istreambuf_iterator<char> 对象,第一个作为 std::string 构造函数的起始位置,第二个作为输入流结束位置。当读取到输入流末尾时,输入流迭代器会等同于 std::istreambuf_iterator<char>(),此时构造函数会自动结束字符串的构造。
需要注意的是,这段代码仅适用于文本文件。对于二进制文件的读取,应当使用另外的方法。
std::ifstream in_real("C:\\Users\\zhuang\\Desktop\\e_fsk_real.bin", std::ios::in | std::ios::binary);
这段代码使用了std::ifstream类来打开一个二进制文件,并将其读入到in_real对象中。其中,第一个参数是文件路径,第二个参数是打开文件的模式,std::ios::in表示以读取模式打开文件,std::ios::binary表示以二进制模式打开文件。如果文件打开成功,则可以使用in_real对象来读取文件内容。
```cpp
std::ifstream in_real("C:\\Users\\zhuang\\Desktop\\e_fsk_real.bin", std::ios::in | std::ios::binary);
if (in_real.is_open()) {
// 文件打开成功,可以读取文件内容
// 例如,读取文件的第一行
std::string line;
std::getline(in_real, line);
std::cout << line << std::endl;
} else {
// 文件打开失败,处理错误
std::cerr << "Failed to open file!" << std::endl;
}
```
阅读全文