如何将bitset转换为bytes/uint8数组?

dub*_*nde 8 c++ arrays bitset

我需要从bitset中取出字节,这可能(不)包含多个CHAR_BIT位.我现在需要将多少位中的位放入数组中.例如,

位集声明为 std::bitset < 40> id;

有一个单独的变量可以使用nBits多少位id.现在我想以CHAR_BIT的倍数提取这些位.我还需要处理案件nBits % CHAR_BIT != 0.我可以将它放入uint8数组中

Emi*_*ier 17

您可以使用boost :: dynamic_bitset,它可以使用boost :: to_block_range转换为一系列"块" .

#include <cstdlib>
#include <cstdint>
#include <iterator>
#include <vector>
#include <boost/dynamic_bitset.hpp>

int main()
{
    typedef uint8_t Block; // Make the block size one byte
    typedef boost::dynamic_bitset<Block> Bitset;

    Bitset bitset(40); // 40 bits

    // Assign random bits
    for (int i=0; i<40; ++i)
    {
        bitset[i] = std::rand() % 2;
    }

    // Copy bytes to buffer
    std::vector<Block> bytes;
    boost::to_block_range(bitset, std::back_inserter(bytes));
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*k B 3

不幸的是,假设您需要的位数大于 an 中的位数unsigned long(在这种情况下您可以使用to_ulong),语言中没有好的方法。您必须迭代所有位并自己生成字节数组。