Datei gibt nicht das aus, womit ich sie beschrieben habe
-
Hi

Ich hab eine Datei folgendermaßen beschrieben:
file << char(a1) << char(a2) << char(a3) << char(a4);file ist vom Typ fstream und a1-4 vom Typ short mit einem Wert von 0-255. Es sollen sozusagen 4 ASCII-Zeichen in die Datei geschrieben werden.
Das Auslesen sieht dann so aus:
char c1,c2,c3,c4; file >> c1 >> c2 >> c3 >> c4; std::cout << short(c1) << "," << short(c2) << "," << short(c3) << "," << short(c4);Hierbei werden mir jedoch völlig andere Werte zurückgeliefert.
Ich vermute, dass es daran liegt, dass die Datei im Unicode statt im ANSI-Format vorliegt.
Wäre echt für jede Hilfe dankbar.

Grüße
-
Wie hast du es geöffnet? Welche Werte hast du geschrieben? Was hast du bekommen? Was hast du erwartet?
Grüssli
-
Geschrieben hab ich die Datei folgendermaßen:
short a1,a2,a3,a4; a1 = ...; a2 = ...; ... // Werte von 0-255 fstream file; file.open(L"datei.dat", ios::binary); file << char(a1) << char(a2) << char(a3) << char(a4); file.close();auslesen:
char c1,c2,c3,c4; fstream file; file.open(L"datei.dat", ios::binary); file >> c1 >> c2 >> c3 >> c4; file.close() std::cout << short(c1) << "," << short(c2) << "," << short(c3) << "," << short(c4);Erwartet habe ich die Werte, mit denen ich a1-4 belegt hatte.
-
th3AddY schrieb:
Erwartet habe ich die Werte, mit denen ich a1-4 belegt hatte.
Und könntest du da Besipielwerte angeben? Mich beschleicht nämlich das Gefühl, dass es Werte sind, welche grösser als 127 sind. Deine eingelesenen
charWerte haben dann negative Werte und wenn du diese einemshortzuweist, dann wird der negative Wert beibehalten.Bsp:
short s = 255; char c = static_cast<char>(s); std::cout << s << std::endl; // 255 std::cout << (int)c << std::endl; // -1 s = c; std::cout << s << std::endl; // -1 // Mögliche Lösung: // Lies unsigned char Werte ein. s = 255; unsigned char uc = static_cast<unsigned char>(s); std::cout << s << std::endl; // 255 std::cout << (int)uc << std::endl; // 255 s = uc; std::cout << s << std::endl; // 255Grüssli
-
Das ist auf jeden Fall schonmal ein guter Anfang. Denn meine Werte liegen im Bereich 0-255.
Mein Ziel ist es, einzelne Bytes als ASCII-Zeichen kodiert in eine Datei zu schreiben.
Jedoch erhalte ich jetzt sehr seltsame Ausgaben.
write:
file << unsigned char(a1) << unsigned char(a2) << unsigned char(a3) << unsigned char(a4);für short a1,a2,a3,a4 mit den Werten:
0,1,226,64read:
unsigned char c1,c2,c3,c4; file >> c1 >> c2 >> c3 >> c4; std::cout << short(c1) << "," << short(c2) << "," << short(c3) << "," << short(c4);und erhalte:
204,204,204,204vier mal denselben Wert.
Ich kann es mir auf jeden Fall nicht erklären.
-
Dann kommt die nächste Wette:
Du hast nicht überprüft, ob das File auch erstellt wurde.Daher ist der Stream ungültig beim Schreiben und es wird nichts rausgeschrieben und beim Lesen ist er nicht offen, bzw. auch ungültig, weshalb nichts gelesen wird, wodurch du uninitialisierte Werte ausgegeben hast.
Das ganze hängt mit den Flags beim Öffnen von
std::fstreamzusammen:
http://www.cplusplus.com/reference/iostream/ios_base/openmode/Ein
std::fstreamist zum Lesen und Schreiben da. Nimm lieber zum Lesen einenstd::ifstreamund zum Schreiben einenstd::ofstream. Oder gib die richtigen Flags explizit an.Grüssli
-
Okay, jetzt funktioniert es.

Vielen Dank!