我正在实现 Shannon-Fano 编码算法,我想将符号代码输出为位。
例如,在下面的代码中,我fin
逐行读取输入文件(流)中的符号,用算法形成的std::string
符号代码(from )填充,然后用. 然后我尝试输出位集,但在输出文件中,位集中的每个“真”或“假”值占用 1 个字节而不是 1 位。std::map<unsigned short, std::string> symbolCodes
boost::dynamic_bitset
currentOutString
if (fin.is_open() && fout.is_open()) {
std::string currentInString;
std::string currentOutString;
while (getline(fin, currentInString)) {
boost::dynamic_bitset<> bitSet;
for (auto & ref : currentInString) {
currentOutString += symbolCodes[ref];
}
for (auto & ref : currentOutString) {
if (ref == '0') bitSet.push_back(0);
if (ref == '1') bitSet.push_back(1);
}
fout << bitSet;
bitSet.clear();
currentOutString.erase();
}
}
fout
流以std::ios_base::binary
模式打开。例如,我有单词“file”,代码是e: 00, f: 01, i: 10, l: 11
. 如何输出我的位集,所以输出文件占用 8 位而不是 8 字节?
提前感谢您的帮助,并对可能的语言错误表示歉意。