0

对于作业,我正在 Visual Studio 中对 Huffman 算法进行压缩/解压缩。在获得 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 个字节被推送,我会多次获得相同的字节。我不熟悉位操作,并要求有人带我完成这个或完成一个工作功能。

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 回答