C++ 整数位移位
我正在尝试为我的哈夫曼编码构建一个位打包器 我有:01001格式的字符串,由于哈夫曼编码的性质,它们的长度是可变的。为了节省空间,我想把这些文件打包成一个整数 以下是我在C++ 整数位移位,c++,bit-manipulation,C++,Bit Manipulation,我正在尝试为我的哈夫曼编码构建一个位打包器 我有:01001格式的字符串,由于哈夫曼编码的性质,它们的长度是可变的。为了节省空间,我想把这些文件打包成一个整数 以下是我在main中的操作: bitpack.pack(found->second, found->second.size()); 在我的比特包里我正在做 void BitPacker::pack(std::string stream, int size) { std::cout << "BitPacke
main
中的操作:
bitpack.pack(found->second, found->second.size());
在我的比特包里我正在做
void BitPacker::pack(std::string stream, int size)
{
std::cout << "BitPacker received:\t" << stream.c_str() << "\t" << size << std::endl;
for(int i = 0; i < size; i++) {
//if buffer is not full keep shifting
std::cout << "Buffer index: " << index << std::endl;
std::bitset<8> binary(buffer);
std::cout << "Buffer: " << binary << std::endl;
if(index < 8) {
if(stream.at(i) == '1') {
buffer += 1;
//buffer << 1;
buffer <<= 1;
index++;
}
else {
//buffer << 0;
buffer <<= 1;
index++;
}
}
//write buffer
else {
std::cout << "Writting:\t"<< buffer << std::endl;
outfile->put(buffer);
index = 0;
buffer = 0;
}
}
}
void BitPacker::pack(标准::字符串流,整数大小)
{
std::cout请尝试buffer=buffer请尝试buffer=buffer这一行,移位buffer
,但不存储移位器值
buffer << 1;
buffer此行移动buffer
,但不存储移位器值
buffer << 1;
buffer这里有一个问题:
buffer << 1;
或
buffer=buffer这里有一个问题:
buffer << 1;
或
buffer=buffer First shift,然后为'1'
案例添加。First shift,然后为'1'
案例添加。我需要按流的存在方式构建流,因此如果我有1001,当前缓冲区是00111001,那么现在就需要10011001,我需要保持正确的顺序来构建流,因此如果我有1001和当前缓冲区是00111001,现在需要是10011001,我需要保持正确的顺序
buffer = buffer << 1;
buffer << 0;
buffer <<= 0;