4Bytes zerlegen in 7bits
-
Für eine Komprimierung müsste ich einen Array von vier Bytes in 5 Zahlen mit der Länge 4 bits zerlegen.
Ich hab zuerst gedacht es würde so gehen:struct { bit7: 7;}SevenBits; union { SevenBits Bits7[5]; unsigned char Bytes[4]; }
Dann könnte ich die Bytes in Bytes[0-3] übertragen.
Dummerweise wird bit7 auch mit der Länge von 4 Bytes angelegt, nur werden die ersten 7 Bits angesprochen.Kann man die 4Bytes noch anders zerlegen ?
-
Du musst mit den Bitoperatoren << und >> (links bzw. rechtshift), & (bitweises UND) und | (bitweises ODER) arbeiten.
-
hmm, versuch mal "char bit7:7;" statt "bit7:7;" , damit der compiler weiss, in welcher größe du das möchtest.
funktioniert das auch nicht, so wärs möglich, dass der compiler die structs auf 32bit (bzw. ein vielfaches davon) aufbläst, da das ja auch am idealsten für 32bit-maschienen ist. beim gcc gibts dann die möglichkeit __attribute__((packed)) an die struct anzuhängen, damit der compiler weiss, dass er das ganze so klein wie möglich halten soll, ich weiss aber nicht, obs das bei dir auch geht (ist afaik eine compiler-spezifische sache).
-
Okay, geht ganz einfach. Man darf nur nicht einen Array benutzen sondern muss die Felder einzeln deklarieren. Trotzdem Danke!
-
XCooperation schrieb:
Okay, geht ganz einfach. Man darf nur nicht einen Array benutzen sondern muss die Felder einzeln deklarieren.
Klingt logisch, da Bitfelder nicht adressierbar sind.
-
Was ist denn mit den Kollegen aus der Assembler-Abteilung ? Bits hört sich, wie ich finde, immer so nach Register und Flags an, vielleicht gibts da den perfekten Algorithmus