我有一個比較大的bitset:位集合分成字符
bitset<128*8> bs;
我想有機會獲得8位組。 什麼的,雖然至今:
- bs.to_string()
- 分割成大小的字符串的向量8
- 創建這些字符串一個新的位集合,並調用to_ulong()
有沒有更好的解決方案?性能至關重要,因爲我在程序中多次調用此方法。
我有一個比較大的bitset:位集合分成字符
bitset<128*8> bs;
我想有機會獲得8位組。 什麼的,雖然至今:
有沒有更好的解決方案?性能至關重要,因爲我在程序中多次調用此方法。
std::bitset
有運營商>>
。
如果您只想訪問該值並閱讀它,則可以使用下面的代碼。它讀取N 個 8位爲uint8_t
:
bitset<128*8> mask(0xFF);
uint8_t x = ((bs >> N * 8) & mask).to_ulong();
不會溢出? –
如果bitset無法用無符號長整型表示,to_ulong會引發溢出異常。 –
@BartlomiejLewandowski:嗯,這個更新版本如何:-) – deepmax
你可以做這樣的事情,以避免創建的字符串和一些複製:
for (uint32_t i = 0; i < bs.size(); i+=8) {
uint32_t uval = 0;
for (uint32_t j = 0; j < 8; j++) {
uval = (uval << 1) + bs[i + 7 - j];
}
std::cout << uval << std::endl;
}
,但你可能需要根據索引工作在你的字節順序上
經過一些基本的谷歌搜索之後,我建議編寫一個自己的包裝類(可能來自'bitset'),它支持char-wise訪問。 – phimuemue
幾乎聽起來像你想'char []'(或'std :: array')。 –
Dukeling
'std :: vector(128)'? –