Frage

Ich versuche, Daten zu schreiben, die in einer Binärdatei mit Turbo C ++ gespeichert sind. Aber es zeigt mir einen Fehler

could not find an match for ostream::write(long *, unsigned int)

Ich möchte ein 4 -Byte schreiben long Daten in diese Datei. Wenn ich versucht, Daten mit char -Zeiger zu schreiben. Es läuft erfolgreich. Aber ich möchte großen Wert speichern, z. B. zB. 2454545454, die in gelagert werden können long nur.

Ich weiß nicht, wie ich 1 Byte in Bit umwandeln soll. Ich habe 1 Daten Byte als Zeichen. Darüber hinaus versuche ich zu tun, 4 Chars in lange zu konvertieren und Daten dazu zu speichern. Und auf der anderen Seite möchte ich dies umkehren, um wie viele Daten Bytes ich geschrieben habe.

long *lmem;
lmem=new long;
*lmem=Tsize;
fo.write(lmem,sizeof(long));// error occurs here
delete lmem;

Ich implementiere die Steganographie und habe die TXT -Datei erfolgreich in das Bild gespeichert, aber ich versuche jetzt, diese Dateidaten abzurufen.

BEARBEITEN:

Ich benutze Turbo Complier.

War es hilfreich?

Lösung

Wirsen Sie es zu a char*

long *lmem;
lmem=new long;
*lmem=Tsize;
fo.write(reinterpret_cast<char*>(lmem),sizeof(long));
delete lmem;

Oder sogar noch besser (da die Zuweisung am Stapel weitaus schneller ist und weniger fehleranfällig ist)

long lmem = Tsize;
fo.write(reinterpret_cast<char*>(&lmem),sizeof(long));

Wenn Tsize ist adressierbar und lange können Sie dies tun:

fo.write(reinterpret_cast<char*>(&Tsize),sizeof(long));

Andere Tipps

Ich glaube, Schreiben nimmt einen Char*, nicht lange*

ostream& write ( const char* s , streamsize n );

http://www.cplusplus.com/reference/iosstream/ostream/write/

1)

const long L = Tsize;
fo.write(reinterpret_cast<const char*>(&L),sizeof(L));

Hier gibt es mehrere Probleme.

Erstens müssen Sie kein ganz neu erstellen long Um tsize zu speichern. Sie können einen Zeiger auf das TSIZE machen, das Sie bereits haben.

Zweitens die write Call nimmt einen Strom von Bytes. Was Sie tun müssen, ist, Ihren Zeiger auf Char*zu werfen.

So was:

fo.write( static_cast<char*>(&Tsize), sizeof(Tsize) );

Drittens ist es ziemlich ineffizient zu schreiben. Wenn Sie eine große Auswahl an langen Werten haben, die Sie schreiben möchten, verwenden Sie einen einzelnen Schreibanruf, um alle von ihnen zu erhalten, wie:

fo.write( static_cast<char*>(array), sizeof(*array) * array_count );

Ich bin mir ziemlich sicher, dass static_cast hier für Zeiger funktioniert, aber wenn er nicht den zu verwendenden Code ändert reinterpret_cast.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top