在整数变量中不保存前导零

时间:2018-08-28 11:57:02

标签: c++ huffman-code

我正在用C ++实现霍夫曼算法,因此我需要以二进制模式写入文件,并且需要以“每位”的方式写入输出文件,因此需要将每个字符的编码保存在缓冲区中,然后当缓冲区达到一个字节的长度时,输出该二进制数字。

代码如下:

char temp[1] = {toPrint[0]};
unsigned long long int binary_buffer = atoi(temp);
int bitscount = 1;
char buf[1];
for(unsigned int i=1;i < strlen(toPrint);i++)
{
    if(bitscount == 8)
    {
       buf[0] = (char)binary_buffer;
       fileout.write(buf,1);
       bitscount = 0;
       binary_buffer = 0;
       buf[0] = 0;
    }
    else
    {
       temp[0] = toPrint[i];
       binary_buffer = (binary_buffer << 1) | atoi(temp);
       bitscount++;
    }
}

所以我的问题是变量binary_buffer丢失了前导零,因为它是整数,所以我丢失了大量数据。如何保存非前导零? 显然,我不能使用char缓冲区,因为每个char都占1个字节。

示例:

要编码的文本:cccccvvv

编码表:c = 0 v = 1

要打印的文本:00000111

打印的文字:111

0 个答案:

没有答案