битовая манипуляция — c ++ цепочка битов в байтах

Для задания я делаю сжатие / распаковку алгоритма Хаффмана в Visual Studio. После того как я получу 8 бит (10101010 например) Я хочу преобразовать его в байт. Вот код, который у меня есть:

    unsigned byte = 0;
string stringof8 = "11100011";
for (unsigned b = 0; b != 8; b++){
if (b < stringof8.length())
byte |= (stringof8[b] & 1) << b;
}
outf.put(byte);

Первая пара цепочек битов выводится корректно в виде байта, но затем, если у меня больше 3 байтов, я получаю один и тот же байт несколько раз. Я не знаком с битовыми манипуляциями и просил, чтобы кто-то провел меня через это или прошел через рабочую функцию.

0

Решение

Использование std :: bitset

#include <iostream>
#include <string>
#include <bitset>int main() {

std::string bit_string = "10101010";
std::bitset<8> b(bit_string);       // [1,0,1,0,1,0,1,0]
unsigned char c = ( b.to_ulong() & 0xFF);
std::cout << static_cast<int>(c); // prints 170

return 0;
}
2

Другие решения


По вопросам рекламы [email protected]