Я предлагаю вам возможное решение.
Не очень хорошо, не так быстро, немного грязно, но я надеюсь, что это может помочь.
#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;
}
Идея заключается в инициализации BitSet к нулю
std::bitset<128> bsTest { } ;
и добавить uint8_t
в то время, в конце другого BitSet
std::bitset<128> bsTmp { (unsigned long) test[ui] };
затем объединить (бит или) два биты
bsTest |= bsTmp;
и сдвиг 8 бит результат
bsTest <<= 8;
p.s .: извините за мой плохой английский штрафа
работает для меня. – DeiDei
Я получаю эту ошибку "error: no match for call to" (std :: bitset <128ul>) (uint8_t [16]) '" –
@DeiDei: Он будет« работать »в том смысле, что если' test' был обнулен, некоторые компиляторы могут использовать конструктор, основанный на строках, определить, что это пустая строка (первый байт - «NUL'), и нуль« биттет »; совпадение корректно, если 'test' обнуляется, но ошибочно во всех остальных случаях. – ShadowRanger