我正在尝试将 aboost::dynamic_bitset
转换为 a string
,以便将其传递给压缩函数。我可以使用它来转换它,boost::to_string
但它会导致多 8 倍的位。当我从 转换回 时string
,boost::dynamic_bitset
它不会将使用的位数减少 8 倍,这将解决我的问题,因为它会导致使用的空间总量最终将是原始压缩位数。
我希望从 -> 开始时停止 8 倍增加,或者从boost::dynamic_bitset
->开始string
时减少 8 倍使用的空间。boost::dynamic_bitset
string
存储的数据boost::dynamic_bitset
来自二进制文件。这是我正在使用的,但理论上任何具有二进制数据的文件都应该可以工作。
当输出位数时,我调用string.size()
它以字节为单位返回大小,因此我乘以 8。boost::dynamic_bitset.size()
以位为单位返回大小,所以我的输出应该是比较苹果和苹果,假设一切都是正确的。
这是我目前得到的输出:
Dynamic bitset input bits = 6431936
String from dynamic_bitset bits = 51455488
Dynamic bitset from string bits = 51455488
这是我的代码:
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <boost/dynamic_bitset.hpp>
#include <boost/math/cstdfloat/cstdfloat_types.hpp>
#include <boost/numeric/conversion/cast.hpp>
typedef boost::float32_t float32;
typedef boost::uint32_t uint32;
int main() {
std::vector<unsigned char> data;
unsigned char *cp;
float32 value = 8.0;
boost::uint32_t internal;
std::memcpy( &internal , &value , sizeof( value ) );
std::ifstream fin("ex.bin", std::ios::binary);
while (fin.read(reinterpret_cast<char*>(&internal), sizeof(uint32))) {
std::memcpy( &value, &internal , sizeof( internal ) );
cp = (unsigned char *)&internal;
for(int i = 0; i < 4; ++i) {
data.push_back(*cp);
++cp;
}
}
boost::dynamic_bitset<unsigned char> bitset;
std::string buffer;
bitset.init_from_block_range(data.begin(), data.end());
std::cout << "Dynamic bitset input bits = " << bitset.size() << "\n";
boost::to_string(bitset, buffer);
std::cout << "String from dynamic_bitset bits = " << buffer.size()*8 << "\n";
boost::dynamic_bitset<unsigned char> from_str(buffer.begin(), buffer.end());
std::cout << "Dynamic bitset from string bits = " << from_str.size() << "\n";
return 0;
}