我正在用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