对于一项作业,我正在 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;
}
关于C++ 位串到字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26656878/