從布林值建立一個位元組,反之亦然
問題:
問題:你有八個布林變數並希望將它們合併為單一位元組。相反,您的目標是將一個位元組解碼為八個不同的布林值。
解決方案:
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; };
酷方式:
分配給一名工會成員並從另一名工會成員那裡讀取。請注意,Bits 中的位元順序是實現定義的。
注意:以這種方式使用聯合在ISO C99 中得到了明確定義,並得到了一些C 的支援編譯器,但它是ISO C中的未定義行為。在 C 20 中使用 memcpy 或 std::bit_cast 進行便攜式類型雙關。以上是如何在一個位元組和八個布林值之間高效轉換?的詳細內容。更多資訊請關注PHP中文網其他相關文章!