Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Daten "binaer" in Datei schreiben

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
16.06.2005, 19:13 Uhr
~erwin
Gast


Hallo!

Ich habe in einem Programm eine Folge aus "0"en und "1" ermittelt, diese habe ich nun z.B. in einem grossen String abgelegt. Nun moechte ich diese Daten in eine Datei schreiben.

Wenn ich aber z.B. einfach


C++:
string myData = "000101110100011010101110111011"; // z.B.

ofstream ofs("out.dat", ios::out);
ofs << myData;



mache, wird natuerlich fuer jedes Zeichen mehr als 1 Bit verbraucht. Ich muesste also irgendwie jedes Zeichen einzeln schreiben, aber halt nur mit einem Bit codiert!?

Oder koennte man z.B. auch 32 Zeichen zusammenfassen und dann nach int wandeln? So muesste man doch spaeter die "Bit-Folge" auch wiederherstellen koennen, oder?

Geht soetwas ueberhaupt? *g*
Danke!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.06.2005, 22:11 Uhr
Bruder Leif
dances with systems
(Operator)


Moin!

Ungetestete Frage: Meinst Du so was wie das hier?


C++:
unsigned long buf = 0;
int i = 0;
for(char* c=myData.c_str(); *c; c++,i++)
{
   if(i==32)
   {
      // TODO: buf schreiben
      i = buf = 0;
   }
   buf = buf * 2 + (*c == '1' ? 1 : 0);
}
if(i) // TODO: buf schreiben


--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.

Dieser Post wurde am 16.06.2005 um 22:14 Uhr von Bruder Leif editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.06.2005, 09:14 Uhr
~erwin
Gast



Zitat von Bruder Leif:
Moin!
Ungetestete Frage: Meinst Du so was wie das hier?



Hi!

Ja, das kommt dem schon sehr nahe Die Daten sind nun schonmal um ein grosses Stueck komprimiert, allerdings reicht das noch nicht ganz aus...
Kann man irgendwie mit C++ direkt bitweise in eine Datei schreiben? Oder wie wuerde man das handhaben?

Ich habe hier www.zotteljedi.de/projects/huffman/huffman.c mal ein Beispiel gefunden, bei dem die Daten entsprechend komprimiert werden. Leider steige ich mangels C-Kenntnissen nicht so recht durch den Code durch...

Konkret sind da wohl die Funktionen "write_header" und "encode" zustaendig. Kann man vergleichbares in C++ erreichen (nehme ich doch mal stark an); wenn ja: wie?

Danke!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
17.06.2005, 09:44 Uhr
Th



Ja, einfach


C++:
ofstream ofs("out.dat", ios::out|ios::binary);

const int nBufferLen = 32;
char *pBuffer[nBufferLen];

ofs.write(pBuffer, nBufferLen);



Wie kommt es, daß du C++ programmierst, aber keinen C Code lesen kannst???
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
17.06.2005, 11:40 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


das simpleste beispiel was ich gefunden habe zum bitweisen schreiben wäre folgendes: (geht sicher einfacher, aber ich fands ganz gut)


C++:
struct BitSet {
  char b1:1;
  char b2:1;
  char b3:1;
  char b4:1;
  char b5:1;
  char b6:1;
  char b7:1;
  char b8:1;
};

union BitAccess {
    unsigned char byte;
    BitSet bits;
};

und dann z.b so:

BitAccess BA;

BA.bits.b1 = 1;
BA.bits.b2 = 1;
BA.bits.b3 = 1;
BA.bits.b4 = 0;
BA.bits.b5 = 0;
BA.bits.b6 = 0;
BA.bits.b7 = 1;
BA.bits.b8 = 0;

printf("11100010 ergibt %d", BA.byte);


und wenn du dann BA.byte mit write wie oben schon genannt in die datei schreibst, hast du 8 deiner bits als ein byte
--
class God : public ChuckNorris { };

Dieser Post wurde am 17.06.2005 um 11:41 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: