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

时间:2015-04-28 20:19:54

标签: c++ casting binary bitset

使用表示位的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;

1 个答案:

答案 0 :(得分:3)

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

  

类模板bitset<N>描述了一个可以存储由固定数量组成的序列的对象   位,N

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

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