Для задания я делаю сжатие / распаковку алгоритма Хаффмана в 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 байтов, я получаю один и тот же байт несколько раз. Я не знаком с битовыми манипуляциями и просил, чтобы кто-то провел меня через это или прошел через рабочую функцию.
Использование 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;
}