In C# würden Sie normalerweise kein bool*
verwenden, was etwas ist, das Sie nur in unsicherem Code verwenden können (was viele andere Dinge wie das Anheften von Objekten und so weiter mit sich bringt). Ein bool*
wäre ein Zeiger auf einen bool'schen Wert. Ein Zeiger ist 4 Bytes lang und kann nicht ohne Verlust in ein Byte umgewandelt werden.
Warum möchten Sie das tun und wo begegnen Sie dem? Normalerweise gibt es nicht leicht einen Anwendungsfall für die Verwendung von Zeigern in C#, es sei denn, Sie haben eine sehr spezifische Anforderung (d. h. einen API-Aufruf, den Sie jedoch mit P/Invoke lösen können).
BEARBEITEN: (weil Sie Ihre Frage bearbeitet haben.)
Der folgende Code-Schnipsel zeigt Ihnen, wie Sie die Adresse einer booleschen Variablen erhalten und wie Sie diesen Zeiger in ein int
umwandeln (eine Umwandlung in byte
ist nicht möglich, wir benötigen vier Bytes).
unsafe
{
// Zeiger auf booleschen Wert erhalten
bool* boolptr = &mybool;
// den int-Zeiger erhalten (jedoch nicht notwendig, erleichtert aber das Folgende)
int* intptr = (int*)boolptr;
// den Wert erhalten, auf den der Zeiger zeigt
int myint = *intptr;
// die Adresse als normale Ganzzahl erhalten
int myptraddress = (int) intptr;
}
Sie sagen "idealwerweise 4 Bits in einem Byte speichern". Falls Sie keine 4-Bits-Maschinenarchitektur haben, rate ich dringend davon ab, da das Abrufen und Speichern der booleschen Werte sehr langsam werden würde. Aber noch wichtiger: Sie sprechen hier von C#, nicht von C++. C# ist an die CLR gebunden, die besagt, dass ein boolean als Byte gespeichert wird und dass jede Speicheradresse in 32-Bit-Architekturen vier Bytes lang ist, was bedeutet, dass Zeiger vier Bytes lang sind. Daher kann Ihre Frage, die Umwandlung eines bool* (Zeiger auf einen bool'schen Wert) in etwas anderes, nur in einen Integer oder einen anderen Datentyp, der vier Bytes breit ist, umgewandelt werden.
Ein Tipp: Mit Flags können Sie den Speicherplatz optimal nutzen: Auf diese Weise verwenden Enum-Typen für jedes Flag ein Bit, was Ihnen acht boolesche Werte für jedes Byte gibt.