哈夫曼编码做压缩软件的问题c++
voidHuffTree::Compression(){charcomfile[200];strcpy(comfile,file);strcat(comfile,".zi...
void HuffTree::Compression()
{
char comfile[200];
strcpy(comfile,file);
strcat(comfile,".zip");
char ch;
ifstream ifile;
ifile.open(file,ios::in);
ofstream ofile;
ofile.open("tmp.txt"); //构建临时文档用于存放产生的所有哈夫曼编码
ofstream ComFile;
ComFile.open(comfile,ios::binary|ios::out);
while(!ifile.eof())
{
ifile.get(ch);
for(int i=0;i<NodeNum;i++)
{
if(NodeTable[i].ch==ch)
{
ofile<<NodeTable[i].code;
break;
}
}
}
ofile.close();
ifile.close();
ifstream fifile;
fifile.open("tmp.txt",ios::in);
unsigned int bin;
while(!fifile.eof())
{
bin=0;
for(int j=0;j<32;j++)
{
fifile.get(ch);
if(ch=='1')
{
bin |= (unsigned int) 1<<j; //对01编码进行比特化
//_A |=(unsigned int) 1<<i
//bin<<1;
}
}
ComFile.write((char*)&bin,4); //写入二进制文件
}
fifile.close();
ComFile.close();
}
这是我看别人写的代码,把01用二进制写进压缩成的文件之后,为什么还要比特化,比特化是什么意思,那一行代码看不懂
我现在的理解是从0开始如果字符为1的话就左移i位,形成32个1,0的二进制,再每次写入4个字节,既分4次写入。不知道对不对,但是那个 |= 符号是什么意思呢? 展开
{
char comfile[200];
strcpy(comfile,file);
strcat(comfile,".zip");
char ch;
ifstream ifile;
ifile.open(file,ios::in);
ofstream ofile;
ofile.open("tmp.txt"); //构建临时文档用于存放产生的所有哈夫曼编码
ofstream ComFile;
ComFile.open(comfile,ios::binary|ios::out);
while(!ifile.eof())
{
ifile.get(ch);
for(int i=0;i<NodeNum;i++)
{
if(NodeTable[i].ch==ch)
{
ofile<<NodeTable[i].code;
break;
}
}
}
ofile.close();
ifile.close();
ifstream fifile;
fifile.open("tmp.txt",ios::in);
unsigned int bin;
while(!fifile.eof())
{
bin=0;
for(int j=0;j<32;j++)
{
fifile.get(ch);
if(ch=='1')
{
bin |= (unsigned int) 1<<j; //对01编码进行比特化
//_A |=(unsigned int) 1<<i
//bin<<1;
}
}
ComFile.write((char*)&bin,4); //写入二进制文件
}
fifile.close();
ComFile.close();
}
这是我看别人写的代码,把01用二进制写进压缩成的文件之后,为什么还要比特化,比特化是什么意思,那一行代码看不懂
我现在的理解是从0开始如果字符为1的话就左移i位,形成32个1,0的二进制,再每次写入4个字节,既分4次写入。不知道对不对,但是那个 |= 符号是什么意思呢? 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询