gpt4 book ai didi

c++ - 将字节数组转换为位集

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:12:22 24 4
gpt4 key购买 nike

我有一个由随机数生成器生成的字节数组。我想将其放入 STL 位集中。

不幸的是,Bitset 似乎只支持以下构造函数:

  1. 一串 1 和 0,例如“10101011”
  2. 一个无符号长整数。 (我的字节数组会更长)

我现在唯一能想到的解决办法就是逐位读取字节数组,做成一个由1和0组成的字符串。谁有更有效的解决方案?

最佳答案

是这样的吗?

#include <bitset>
#include <climits>

template<size_t numBytes>
std::bitset<numBytes * CHAR_BIT> bytesToBitset(uint8_t *data)
{
std::bitset<numBytes * CHAR_BIT> b;

for(int i = 0; i < numBytes; ++i)
{
uint8_t cur = data[i];
int offset = i * CHAR_BIT;

for(int bit = 0; bit < CHAR_BIT; ++bit)
{
b[offset] = cur & 1;
++offset; // Move to next bit in b
cur >>= 1; // Move to next bit in array
}
}

return b;
}

还有一个用法示例:

int main()
{
std::array<uint8_t, 4> bytes = { 0xDE, 0xAD, 0xBE, 0xEF };
auto bits = bytesToBitset<bytes.size()>(bytes.data());
std::cout << bits << std::endl;
}

关于c++ - 将字节数组转换为位集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/708114/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com