Byte und FileStreams... HILFÄ!
-
Hallo,
ächz, ich dreh hier durch.
Also ich schreibe via write etwas in eine Datei:
unsigned short buffer = 34000; file.write((char*)&buffer, 2);
Jetzt sind da also 2 Bytes drin, die die Zahl repräsentieren sollen...
2 Bytes sind so groß wie ein (unsigned) short, deswegen muss das ja gehen.
Nun habe ich später beim Laden das alles in einem char*, genauer in 2 chars.
Wie bekomme ich es jetzt einfacherweise hin, dass diese beiden chars zu einem unsigned short zusammengefügt werden?Danke im Vorraus X'(
MfG MAV
-
warum castest du überhaupt auf char?
unsigned short buffer = 34000; file.write(&buffer, sizeof buffer);
und irgend wann anders:
unsigned short buffer; file.read(&buffer, sizeof buffer);
aber portabel wird dein programm dadurch nciht
-
Portabilität ist mir egal, ich muss immer nur USHORT in die datei schreiben, das ist festgelegt, immer 2 Byte, aber deine Methode geht net:
Original erstellt von MS Visual C++ Compiler
**
E:\Projekte\Miniproggs\Para\main.cpp(43) : error C2664: 'write' : Konvertierung des Parameters 1 von 'unsigned short *' in 'const char *' nicht moeglich
Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
**[ Dieser Beitrag wurde am 09.06.2003 um 12:42 Uhr von Mis2com editiert. ]
-
unsigned short s= *static_cast<unsigned short*>(str);
so sollte es gehen...
-
Für was ist das denn jetzt?
str wäre dann doch wenn überhaupt nur ein char, oder?
MfG MAV
-
unsigned short n = 42; const size_t size = sizeof(n); file.write (reinterpret_cast<char*>(&n), size); //und später char x[size]; file.read (x, size); unsigned short y = *reinterpret_cast<short*>(x);
-
Also...
Das Schreiben sieht immer gleich aus, egal wie ichs mache, in der Datei steht nachher dasselbe, folglich ist das Speichern ok.
Laden...
Ich lade vieles und alles ist bei mir am Ende in einem char*.
read kann ich net verwenden!ich möchte jetzt einfach nur die simple Methode, wie ich 2 chars in einen unsigned short gestopft bekomme, dann müsste es klappen.
Danke schon einmal!
EDIT:
So, das ist jetzt mein Versuch.char* a = new char[2]; a[0] = buffer[lastpos+4]; a[1] = buffer[lastpos+5]; unsigned short y = *reinterpret_cast<short*>(a); strstr << "Anzahl der Objekte: " << y << '\n'; delete[] a;
buffer[lastpos+4] und buffer[lastpos+5] sind meine beiden chars daran lässt sich leider nix ändern.
Das Programm bricht ziemlich zusammen.
MfG MAV
[ Dieser Beitrag wurde am 09.06.2003 um 13:14 Uhr von Mis2com editiert. ]
-
@Mis2com
Was soll das mit dem neuen Thema? Diese Frage hätte genausogut in deinem ersten Thread gepasst.Bitte belasse es beim nächsten Mal bei *einem* Thread. Da wird man ja sonst völlig verrückt.
-
Wie auch immer... X-(
8J sind die beiden chars (so wie ich in der datei sehe)Und ich habe 19000 geschrieben.
Ist es wirklich wahr, dass 8J 19000 darstellt? (für die, die es gerade zufällig wissen)Das obige Programm bricht wie gesasgt zusammen.
Also an dieser Stelle hat das ja wirklich nichts mehr mit FileStreams zu tun, sondern halt damit, wie ich einfaqch nur 2 läppische chars (1 BYTE jeweils) zu einem unsigned short (2 byte also perfekt passend) zusammengewürfelt kriege, aber explizit, so wie es file.write macht.
file.read kann ich nicht verwenden!MfG MAV
[EDIT]
@HumeSikkins:
Ja, sorryMfG MAV
[ Dieser Beitrag wurde am 09.06.2003 um 13:25 Uhr von Mis2com editiert. ]
-
Ah sauber:
char a; char b; unsigned short c; c = a + (b << 8);
^^
MfG MAV