Мне нужно извлечь байты из набора битов, который может (не) содержать несколько битов CHAR_BIT. Теперь я знаю, сколько битов битового набора мне нужно поместить в массив. Например,
набор битов объявлен как std :: bitset <40> id;
Существует отдельная переменная nBits
, сколько битов в id
можно использовать. Теперь я хочу извлечь эти биты, кратные CHAR_BIT. Мне также нужно позаботиться о случаях, когда nBits% CHAR_BIT! = 0
. Я могу поместить это в массив uint8
Со стандартным C++ 11, можно вытащить байты из 40-разрядного bitset
со смещением и маскированием. Я не имел дело с обработкой различных значений, а не 8 и 40 и обработкой, когда второе число не является несколькими первыми.
#include <bitset>
#include <iostream>
#include <cstdint>
int main() {
constexpr int numBits = 40;
std::bitset<numBits> foo(0x1234567890);
std::bitset<numBits> mask(0xff);
for (int i = 0; i < numBits / 8; ++i) {
auto byte =
static_cast<uint8_t>(((foo >> (8 * i)) & mask).to_ulong());
std::cout << std::hex << static_cast<int>(byte) << std::endl;
}
}