Ich versuche, Daten aus einer Binärdatei zu einem Std :: String zu lesen. Hier ist was ich zuerst versucht habe.Lesen von Binärdaten in std :: string C++
#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 ;
}
Und der Compiler gab den Fehler:
error: invalid conversion from ‘const char*’ to ‘std::basic_istream<char>::char_type* {aka char*}’ [-fpermissive]
file.read(my_str.c_str(), 5);
Soweit ich verstehe, c_str() ein const Zeiger zurückgibt, die nicht in Leseverfahren verwendet werden kann, also habe ich mein Ansatz ein wenig (was Sie unten sehen können). Gibt es einen besseren Weg, dies zu tun?
#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: mir verzeihen, wenn ich mich nicht deutlich machen konnte, dies ist mein erstes Mal hier :)
ich würde 'std :: vector' oder 'std :: vector ' statt von 'std :: string' –
Slava
Ich konnte nie verstehen, warum Leute' std :: string' für binäre Daten benutzen. Denken Sie daran, dass der "value_type" dieses Containers "char" ist, was zu Problemen in Bezug auf die Zeichenerweiterung führen kann (denken Sie zum Beispiel daran, was das Ergebnis von "my_str [3] == 0x95" sein wird). Sie könnten 'std :: vector' verwenden. –