gpt4 book ai didi

C++:使用将未知长度的01字符串转为二进制

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:42:10 24 4
gpt4 key购买 nike

我正在使用哈夫曼压缩文件,但是很惊讶地发现压缩后的文件比原来的还要大!检查我的代码后,我猜可能是因为使用了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的大小时,会自动填满,这可能会消耗额外的空间。
我一直在寻找合适的解决方案很长一段时间...
下面是我的问题:如何使用 将一个未知长度的01字符串转换成二进制?或者不可能那样做?还有其他更好的解决方案吗?
如果您能告诉我答案,我将不胜感激!

最佳答案

简单的解决方案

如果性能不是问题,std::vector<bool>很合适。它也不支持某些库概念,但您似乎并没有在使用它们。它可能需要重载 operator>>operator<< .

更难的解决方案

自己动手。这将需要一些开发时间,但如果您不过度概括,应该会很快。只需在部署前对其进行测试即可。

依赖性

Boost 具有动态位集。我相信他们有自己的许可证,所以可能需要一些时间来确定它是否适合你的项目,但除此之外它已经过很好的测试。我自己使用过它,效果非常好。

关于C++:使用<bitset>将未知长度的01字符串转为二进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47494003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com