将 bitset 转换为 unsigned char,反之亦然

Casting a bitset to unsigned char, and vice versa

使用 unsigned char 数组,表示位。我遇到了以下情况。在 MSVC 2013 上,将 std::bitset<8> 转换为 char,然后返回。似乎是一件有效的事情。

但是在C++11 ISO标准中。我找不到这个有效的参考。据我所知,std::bitset 只是一个 bool 数组。具有更多的内存经济实现和一些围绕它的功能。

简而言之,我的问题是:下面的代码是否有效。

unsigned char* myChar = new unsigned char(0x0F);
((std::bitset<8>*)myChar)->set(2);
((std::bitset<8>*)myChar)->reset(6);

std::cout << "expression result:" << (uint8_t)*myChar;

这是未定义的行为。该标准仅说明

The class template bitset<N> describes an object that can store a sequence consisting of a fixed number of bits, N.

它没有说明这个 class 的内部布局。无法保证 sizeof(bitset<8>)1。在我的实现中,它恰好是 8。因此,您对 class 的内部结构所做的任何假设都只是 - 一个假设。如果你想将 unsigned char 转换为 bitset<8>,已经有一个简单的方法可以做到这一点:

unsigned char myChar = 0x0F;
std::bitset<8> bs(myChar);