void CCompressDlg::FileCompress()
{
int i,j;
BYTE ch=0,buffer[2];
unsigned char vanl[3],tch,R_van=0;
WORD *p1;
int remain=0,byte_num=0;
fseek(fout,12L,0);//预留表头
for(i=0;i<f_head.SourceSignalNum;i++)//写码表
{
fwrite(&f_table
.SourceSignal_CodeLength,1,1,fout);//дÈëÂë±í
fwrite(&f_table.CodeBits,2,1,fout);
}
f_head.hfSize=12;
while(!feof(fp))
{
//读文件
//编写文件
p1=(WORD*)(&vanl[0]);
buffer[0]=fgetc(fp);
buffer[1]=buffer[0]&0x0F;//buffer[1] lower 4 bits
buffer[0]>>=4;//buffer[0] higher 4 bits
for(i=0;i<2;i++)
{
ch=buffer;
*p1=temp_table[ch].HCode;
byte_num=((int)temp_table[ch].length+remain)/8;
p1=*p1<<(8-remain)这句是做什么的?
tch=vanl[1];
tch=tch>>remain;
vanl[2]=tch|R_van;
for(j=0;j<byte_num;j++)
{
fwrite(&vanl[2-j],1,1,fout);
f_head.hfSize++;
}
R_van=vanl[2-j];
remain=(temp_table[ch].length+remain) % 8;
}
}
其中temp_table[ch].HCode;是读入编码对应的霍夫曼编码,主要是while循环内部看不懂,
就这么段代码,看了几小时了,求达人给出详细解释,快崩溃球