我正在尝试从二进制文件中读取数据并存储到std::string中。以下是我最初尝试的代码。
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main(int argc, char const *argv[])
{
fstream file("output.bin" , ios::out | ios::binary | ios::in);
string my_str(5, '\0');
file.read(my_str.c_str(), 5);
cout << "String = " << my_str<< endl ;
}
编译器报错:
error: invalid conversion from ‘const char*’ to ‘std::basic_istream<char>::char_type* {aka char*}’ [-fpermissive]
file.read(my_str.c_str(), 5);
据我所知,c_str()返回一个不能用于读取方法的常量指针,因此我稍微改变了我的方法(如下所示)。有更好的方法吗?
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main(int argc, char const *argv[])
{
fstream file("output.bin" , ios::out | ios::binary | ios::in);
string my_str(5, '\0');
char buffer[6];
file.read(buffer, 5);
buffer[5] = '\0';
my_str = string(buffer);
cout << "String = " << my_str<< endl ;
}
提示:如果我表达不清楚,请原谅,这是我第一次在这里 :)
std::vector<char>
或std::vector<uint8_t>
代替std::string
。 - Slavastd::string
来处理二进制数据。请记住,这个容器的value_type
是char
,这可能会导致与符号扩展相关的问题(例如,想想my_str[3] == 0x95
的结果会是什么)。你可能想要使用std::vector<std::uint8_t>
。 - Daniel Kamil Kozar