ホームページ >バックエンド開発 >C++ >1 バイトと 8 つのブール値の間で効率的に変換するにはどうすればよいですか?

1 バイトと 8 つのブール値の間で効率的に変換するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-12 11:38:08476ブラウズ

How to Efficiently Convert Between a Byte and Eight Boolean Values?

ブール値からのバイトの作成とその逆

問題:

は 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。