0

課題として、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);

最初の 2 バイトのビット文字列はバイトとして正しく出力されますが、プッシュされているバイトが 3 バイトを超えると、同じバイトが複数回取得されます。私はビット操作に慣れていないので、誰かにこれについて説明してもらうか、機能する関数について説明してもらいたいと思っていました。

4

1 に答える 1

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;
}
于 2014-10-30T19:31:32.827 に答える