从布尔值创建一个字节,反之亦然
问题:
你有八个布尔变量并希望将它们合并为单个字节。相反,您的目标是将一个字节解码为八个不同的布尔值。
解决方案:
困难方法:
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中文网其他相关文章!