【发布时间】:2018-05-09 16:37:03
【问题描述】:
我正在使用霍夫曼压缩文件,但惊讶地发现压缩文件的大小比原来的还要大!检查我的代码后,我猜可能是因为使用了 bitset。这是我的代码:
void Huffman::compression(string filename,string comfile)
{
ofstream write(comfile, ios::binary);
ifstream ts;
ts.open(filename);
string str,bitstr;
while (getline(ts, str))
{
bitstr = to_bitstr(str);
//to_bitstr() function convert string into 01 string
stringstream ss(bitstr);
while (ss.good())
{
bitset<8> bits;
ss >> bits;
write << bits;
}
}
}
我分别使用bitset<16> 和bitset<32> 测试了我的程序,当然,文件越来越大。我大概知道原因:当01位无法填充bitset的大小时,会自动填充,这可能会花费额外的空间。
很长一段时间以来,我一直在寻找合适的解决方案...
以下是我的问题:如何使用
如果您能告诉我答案,我将不胜感激!
【问题讨论】:
-
您可以使用
std::bitset<8>并将字符串分成8 位数字的部分。结果将适合std::vector<uint8_t>的单个字节。 -
std::vector<bool>怎么样?std::vector<>专门用于bool将值存储为位。 -
非常感谢!我将文本作为字符串读取并将其转换为 01 字符串,然后将其转换为位集。但我改用 fwrite ,它解决了问题。!你的回答给了我灵感!
-
std::vector<bool>很酷...
标签: c++