我有 8 bool
变量,我想将它们“合并”成一个字节。
有没有简单/首选的方法来做到这一点?
反过来,将一个字节解码为 8 个独立的布尔值怎么样?
我假设这不是一个不合理的问题,但由于我无法通过谷歌找到相关文档,这可能是另一个“你的直觉都是错误的”案例。
原文由 xcel 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有 8 bool
变量,我想将它们“合并”成一个字节。
有没有简单/首选的方法来做到这一点?
反过来,将一个字节解码为 8 个独立的布尔值怎么样?
我假设这不是一个不合理的问题,但由于我无法通过谷歌找到相关文档,这可能是另一个“你的直觉都是错误的”案例。
原文由 xcel 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可能想查看 std::bitset
。它允许您使用您期望的所有运算符将布尔值紧凑地存储为位。
当你可以抽象出来时,没有必要用比特翻转和诸如此类的东西鬼混。
原文由 user406009 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
艰难的道路:
和:
或者很酷的方式:
然后您可以分配给工会的一个成员并从另一个成员那里读取。但请注意,
Bits
中的位顺序是实现定义的。请注意,在编写另一个联合成员之后读取一个联合成员在 ISO C99 中是明确定义的,并且作为几个主要 C++ 实现(包括 MSVC 和 GNU 兼容的 C++ 编译器)的扩展,但在 ISO C++ 中是未定义的行为。
memcpy
或 C++20std::bit_cast
是在便携式 C++ 中键入双关语的安全方法。(此外,
char
中的位域的位顺序是 实现定义 的,位域成员之间可能有填充。)