Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 整数位移位_C++_Bit Manipulation - Fatal编程技术网

C++ 整数位移位

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

我正在尝试为我的哈夫曼编码构建一个位打包器

我有:01001格式的字符串,由于哈夫曼编码的性质,它们的长度是可变的。为了节省空间,我想把这些文件打包成一个整数

以下是我在
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;