Как преобразовать битовый набор в массив байтов / uint8?

Мне нужно извлечь байты из набора битов, который может (не) содержать несколько битов CHAR_BIT. Теперь я знаю, сколько битов битового набора мне нужно поместить в массив. Например,

набор битов объявлен как std :: bitset <40> id;

Существует отдельная переменная nBits , сколько битов в id можно использовать. Теперь я хочу извлечь эти биты, кратные CHAR_BIT. Мне также нужно позаботиться о случаях, когда nBits% CHAR_BIT! = 0 . Я могу поместить это в массив uint8

8
задан dubnde 28 November 2011 в 15:12
поделиться

1 ответ

Со стандартным 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;
    }
}
1
ответ дан 5 December 2019 в 07:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: