将二进制数据读入 std::string c

新手上路,请多包涵

我正在尝试将数据从二进制文件读取到 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() 返回一个不能在 read 方法中使用的 const 指针,所以我稍微改变了我的方法(你可以在下面看到)。有一个更好的方法吗 ?

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

ps:如果我不能说清楚,请原谅我,这是我第一次来这里:)

原文由 baris_esmer 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 998
1 个回答

在 C++11 中,获取指向字符串数据的非 const 指针的方法是:

 file.read(&my_str[0], 5);

C++17 也将为此引入非 const data()

 file.read(my_str.data(), 5);

原文由 Barry 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题