Der Datentyp "bool" ist nicht ein Bit, sondern in der Regel äquivalent
zu int, also je nach Prozessor 16 oder 32 Bit groß.
Daher kann das oben aufgeführte Typecasting nicht funktionieren.
C unterstützt keine Bit-Datentypen, zwar gibt es Bitfelder, auf die
aber kann nicht mit Arrayoperatoren zugegriffen werden.
Beispiel:
union
{
struct
{
unsigned char bit0 : 1;
unsigned char bit1 : 1;
unsigned char bit2 : 1;
unsigned char bit3 : 1;
unsigned char bit4 : 1;
unsigned char bit5 : 1;
unsigned char bit6 : 1;
unsigned char bit7 : 1;
} bitfeld;
unsigned char zeichen;
} bla;
Hier kann mit
bla.bitfeld.bit0 = 0;
ein einzelnes Bit manipuliert werden, und mit
bla.zeichen = 0;
auf -in diesem Falle- alle 8 Bits simultan zugegriffen werden.
Es gibt aber keinen Arrayoperator für Bitfelder, so daß die von Felix
erwähnte Einleseroutine die einzelnen Bits nicht einfach in ein Array
eintragen kann.
Stattdessen müsste entweder mit solchen Bitfeldern wie in meinem
Beispiel gearbeitet werden, was reichlich umständlich ist, oder aber
die Bits werden von vornherein mit entsprechenden Bitoperationen in
ganze Bytes eingetragen:
unsigned char Wert;
int i;
Wert = 0;
for (i = 0; i < 8; i++)
Wert |= LeseEingang() << i;
Hier wird vorausgesetzt, daß die Funktion LeseEingang 0 oder 1
liefert.
Das muss bei größeren Bitanzahlen entsprechend adaptiert werden.