【问题标题】:convert uint8_t array to bitset in C++ [duplicate]在C ++中将uint8_t数组转换为位集[重复]
【发布时间】:2016-08-30 07:15:17
【问题描述】:

有没有一种快速的方法可以将一个 uint8_t 数组转换为一个比特集。

uint8_t test[16]; 
// Call a function which populates test[16] with 128 bits
function_call(& test);
for(int i=0; i<16; i++)
  cout<<test[0]; // outputs a byte
cout<<endl;
std:: bitset<128> bsTest;

我试过了,但是不行

bsTest(test);

【问题讨论】:

  • 对我来说很好。
  • 我收到此错误“错误:不匹配调用‘(std::bitset) (uint8_t [16])’”
  • @DeiDei:如果test 被清零,它会“工作”,一些编译器可能会使用基于字符串的构造函数,确定它是空字符串(第一个字节是NUL ),并将bitset 归零;如果test 为零,则巧合正确,但在所有其他情况下都是错误的。
  • @ShadowRanger 我在写评论时认为这是真的。似乎 OP 出现编译器错误,我无法重现。
  • @CPP_NEW 使用给您带来问题的实际代码编辑问题。

标签: c++ bitset std-bitset


【解决方案1】:

我建议你一个可能的解决方案。

不太好,不太快,有点脏,但我希望它能有所帮助。

#include <bitset>
#include <iostream>

int main ()
 {
   uint8_t  test[16] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
                         'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p' };

   std::bitset<128> bsTest { } ;

   for ( unsigned ui = 0 ; ui < 16 ; ++ui )
    {
      bsTest <<= 8;

      std::bitset<128> bsTmp { (unsigned long) test[ui] };

      bsTest |= bsTmp;
    }

   std::cout << bsTest;

   return 0;
 }

想法是将位集初始化为零

std::bitset<128> bsTest { } ;

并在另一个位集的末尾一次添加一个uint8_t

std::bitset<128> bsTmp { (unsigned long) test[ui] };

然后合并(位或)两个位集

bsTest |= bsTmp;

并将结果移位 8 位

bsTest <<= 8;

p.s.:对不起我的英语不好

【讨论】:

  • 非常感谢!!它现在以某种方式为我工作。我会看看我能不能让它更快。顺便说一句,你的英语和我的一样好(或更好):)
猜你喜欢
  • 2022-11-10
  • 2012-04-29
  • 1970-01-01
  • 2020-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-14
相关资源
最近更新 更多