gpt4 book ai didi

c++ - 如何从 8 个 boolean 值中创建一个字节(反之亦然)?

转载 作者:IT老高 更新时间:2023-10-28 21:49:44 27 4
gpt4 key购买 nike

我有 8 个 bool 变量,我想将它们“合并”成一个字节。

有没有简单/首选的方法来做到这一点?

反过来,将一个字节解码为 8 个独立的 boolean 值怎么样?

我进来假设这不是一个不合理的问题,但由于我无法通过 Google 找到相关文档,这可能是另一种“你的直觉都错了”的案例。

最佳答案

艰难的道路:

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;
};

然后您可以分配给 union 的一个成员并从另一个成员读取。但请注意,Bits 中的位顺序是实现定义的。

请注意,在编写另一个 union 成员之后读取一个 union 成员在 ISO C99 中是明确定义的,并且作为几个主要 C++ 实现(包括 MSVC 和 GNU 兼容的 C++ 编译器)的扩展,但在 ISO C++ 中是未定义行为。 memcpyC++20 std::bit_cast是在可移植 C++ 中键入双关语的安全方法。

(此外,char 中位域的位序为 implementation defined,位域成员之间可能有填充。)

关于c++ - 如何从 8 个 boolean 值中创建一个字节(反之亦然)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8461126/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com