Auslesen und Schreiben von bits



  • Hallo,

    ich wuerde gerne wissen, wie man aus einer Datei (oder einem Datentyp) einzelne bits ausliest. Ist dies ueberhaupt moeglich? fseek etc, positionieren den Zeiger in einem Stream in Einheiten von bytes. Aber angenommen, ich habe ein Format, bei dem das erste Feld (fixer bitlaenge, z.B. ein char) angibt, wie gross die folgenden Felder sind, sagen wir mal 5. Dann sollen die naechsten Bloecke von je 5bits Binaerzahlen darstellen, also z.B.

    00000101 01001 11011 01111 ...,
    ^^^^^^^^ ^^^^^ ^^^^^ ^^^^^
      = 5     =9    =-11  = 15
    

    nur dass die Leerzeichen als Trennfelder unnoetig sind, da ich ja angegeben habe, dass die Bloecke 5bits lang sind.

    Ist es moeglich, eine Datei in so einem format zu schreiben, oder laesst das z.B. das Dateisystem gar nicht zu?
    Wenn es moeglich ist, wie wuerde ich schreiben und wie lesen?

    Vielen Dank im Voraus,

    Tim



  • Du könntest die Daten trotzdem noch byteweise ein/auslesen (falls am Ende kein komplettes Byte übrigbleibt, mit 0 auffüllen) und anschließend im Spiecher per Bit-Operationen (Shift, Und, Oder, XOR) auseinandernehmen und wieder zusammensetzen.



  • Danke, das kann ich mir gerade so vorstellen, auch wenn das kompliziert klingt.
    Und wie wuerde ich die schreiben?



  • Zum Schreiben füllst du wieder ein char-Array mit den richtig zusammengefügten Bittserien und schickst es dann am Stück in deine Datei.



  • hm, klasse. Danke!



  • Für sowas könnte man auch struct und union nutzen:

    struct st_bit
    {
       int eins:5;
       int zwei:5;
       int drei:5;
       int vier:5;
       int fuenf:5;
       int sechs:5;
       int sieben:5;
       int acht:5;
    };
    
    union un_bytes_in_bits
    {
       struct st_bit bits;
       char bytes[5];
    };
    

Anmelden zum Antworten