使用表示位的无符号字符数组。我遇到了以下问题。在MSVC 2013上,将anstd::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;
这是未定义的行为。该标准仅声明
类模板
bitset<N>
描述了一个对象,该对象可以存储由固定位数组成的序列N
。
它内部没有关于此类的布局。有没有保证sizeof(bitset<8>)
的1
。在我的实现中,它恰好是8
。因此,您对此类内部的任何假设都只是一个假设。如果您想将转换unsigned char
为bitset<8>
,已经有一种简单的方法:
unsigned char myChar = 0x0F;
std::bitset<8> bs(myChar);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句