"Binaerdaten" speichern?



  • Hallo,

    folgendes Problem:

    Ich habe in einem Programm eine Folge aus 0en und 1en, abgelegt in einem grossen String. Nun moechte ich diese Daten in einer Datei speichern -- nur waere es ja etwas verschwenderisch, einfach die Folge aus 0en und 1en direkt zu schreiben, da fuer deren Kodierung ja eben auch 1 Bit ausreichen wuerde.

    Nun fand ich in diesem PDF (Seite 7, Punkt 4) den Hinweis, dass man diesen String in 32er Bloecke aufspalten koennte, anschliessend in Integer wandeln und somit platzsparend speichern koennte.

    Ich scheitere allerdings schon daran, den String in 32 Zeichen grosse Bloecke aufzutrennen ...

    - was macht man, wenn man am Ende des Strings z.B. nur noch 15 Zeichen uebrig sind, die muessten dann ja von vorne mit Nullen aufgefuellt werden, oder?
    - wie wandele ich dann diesen 32 Zeichen langen String aus 0en und 1en in einen Integer? (der Rueckweg sollte sich ja dann daraus ergeben, oder?)

    Danke schonmal fuer eure Hilfe!



  • zu 1:

    z.b.
    long lNumEndBits = StringLänge % 32;
    und die zahl schreibste dann als erstes in die datei als ne art header

    zu 2:

    z.b.

    char str[33] = "11111111000000001111111100000000";
      unsigned int iResult = 0;
    
      for ( int i = 0; i < 32; ++i )
      {
        switch ( str[i] )
        {
        case '0':
          //nix zu tun
          break;
        case '1':
          //das bit ganz rechts auf 1 setzen
          iResult |= 1;
          break;
        default:
          return -1;
        }
    
        if ( i < 31 )
        {
          //alle bits um eins nach links verschieben
          iResult <<= 1;
        }
      }
      return 0;
    


  • ich kenn mich mit c++ noch nicht so aus, aber soviel ich weiß gibt es da den datentyp vector<bool>, mit dem du auf einzelne bits wie auf die felder eines arrays zugrefen kannst. aber wie das mit dem vector<bool> genau geht habe ich bis jetzt selbst noch nicht herausgefunden.


Anmelden zum Antworten