ブール値のバイトへのデコードおよびバイトへのエンコードは、さまざまな方法で実現できます。この記事では、次の 2 つのアプローチについて説明します。
ハード ウェイ:
直接ビット操作アプローチを利用し、次の関数が使用されます:
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; } void FromByte(unsigned char c, bool b[8]) { for (int i = 0; i < 8; ++i) { b[i] = (c & (1 << i)) != 0; } }
このメソッドでは、各ブール値はビットで表され、1 バイト (8 ビット) は 8 つのブール値を保持できます。
クールな方法:
別のアプローチでは、構造体と共用体内のビットフィールドを利用して柔軟なデータ操作を提供します:
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; };
こちら、Bits 構造体は 8 つのブール値をビットフィールドとして保持します。 CBits 共用体は同じメモリ空間を共有し、ビット メンバーを介してブール値、またはバイト メンバーを介してバイト値にアクセスできます。
実装ノート:
以上がブール値を効率的にエンコードしてバイトにデコードするにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。