ブール値からのバイトの作成とその逆
問題:
は 8 つありますブール変数を単一バイトにマージしたい。逆に、バイトを 8 つの異なるブール値にデコードすることを目的としています。
解決策:
難しい方法:
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; }
クール方法:
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; };
1 つの共用体メンバーに代入し、別の共用体メンバーから読み取ります。 Bits のビットの順序は実装で定義されていることに注意してください。
注意:
この方法での共用体の使用は ISO C99 で明確に定義されており、一部の C でサポートされています。コンパイラでは使用できますが、ISO C では未定義の動作です。 C 20 での移植可能な型パニングには memcpy または std::bit_cast を使用します。
以上が1 バイトと 8 つのブール値の間で効率的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。