Heim > Backend-Entwicklung > C++ > Wie kann ich acht boolesche Werte effizient in einem einzigen Byte zusammenführen und dekodieren?

Wie kann ich acht boolesche Werte effizient in einem einzigen Byte zusammenführen und dekodieren?

DDD
Freigeben: 2024-12-31 22:28:10
Original
1007 Leute haben es durchsucht

How Can I Efficiently Merge and Decode Eight Boolean Values into a Single Byte?

Boolesche Werte in Bytes zusammenführen und dekodieren

Einführung

Programmierer stoßen häufig auf die Notwendigkeit, boolesche Werte in einem darzustellen kompakte Form, z. B. ein einzelnes Byte. In diesem Artikel werden zwei Ansätze zum Zusammenführen und Dekodieren von booleschen Werten in und aus Bytes untersucht.

Boolesche Werte zusammenführen

Um acht boolesche Werte in einem Byte zusammenzuführen, kann man das verwenden Folgender Ansatz:

unsigned char ToByte(bool b[8])
{
    unsigned char c = 0;
    for (int i = 0; i < 8; i++)
        if (b[i])
            c |= 1 << i;
    return c;
}
Nach dem Login kopieren

Dieser Code iteriert über die booleschen Werte und setzt die entsprechenden Bits in Byte mithilfe bitweiser ODER-Operationen.

Bytes dekodieren

Um ein Byte in acht separate boolesche Werte zu dekodieren, kann man diese Funktion verwenden:

void FromByte(unsigned char c, bool b[8])
{
    for (int i = 0; i < 8; i++)
        b[i] = (c & (1 << i)) != 0;
}
Nach dem Login kopieren

Diese Funktion durchläuft die Bits im Byte, prüft, ob jedes Bit gesetzt ist und weist den entsprechenden booleschen Wert zu Wert.

Coole Alternative: Union

Alternativ kann man eine Union verwenden, um sowohl boolesche Werte als auch ein Byte darzustellen:

struct Bits
{
    unsigned b0:1, b1:1, b2:1, b3:1, b4:1, b5:1, b6:1, b7:1;
};

union CBits
{
    Bits bits;
    unsigned char byte;
};
Nach dem Login kopieren

By Indem man an ein Mitglied der Gewerkschaft schreibt und vom anderen liest, kann man boolesche Werte effizient zusammenführen und dekodieren. Es ist jedoch wichtig zu beachten, dass die Reihenfolge der Bits in der Bitstruktur durch die Implementierung definiert ist.

Implementierungshinweise

Es ist wichtig zu beachten, dass das Lesen eines Mitglieds von a Union nach dem Schreiben in eine andere ist in ISO C99 und als Erweiterung in wichtigen C-Compilern klar definiert. Es handelt sich jedoch um undefiniertes Verhalten in ISO C. Um die Portabilität sicherzustellen, wird empfohlen, memcpy oder C 20 std::bit_cast für Typ-Wortspiele in C zu verwenden.

Das obige ist der detaillierte Inhalt vonWie kann ich acht boolesche Werte effizient in einem einzigen Byte zusammenführen und dekodieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage