2015-04-28 152 views
3

使用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

不,這是不確定的。 – molbdnilo

回答

3

這是不確定的行爲。該標準僅規定

類模板bitset<N>描述了可以存儲由固定數量的比特 ,N的序列中的對象。

它沒有說內部這個類的佈局。不保證sizeof(bitset<8>)1。在我的實施中,它恰好是8。因此,你對這個類內部的任何假設都只是這個假設。如果您想將unsigned char轉換爲bitset<8>,已經有一個簡單的方法來做到這一點:

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