莫名其妙的EOF,输出文件总是多一个字节,cmp: EOF on xxx
做一个哈夫曼编码的小程序,开始用递归方法查表进行解码,正常;后来试试不用递归来写,就改了一下。。。发现。。。。结果不同,凭空多出一个字节?!用cmp比较。。。报告"cmp: EOF on ...",怎么回事儿??
后来输出每一个保存到文件里字节,发现两种写法的输出完全一样,字节数也一样,可是。。。费解的就是非递归方法产生的文件就是会多一个字节,而且用winhex看不到那个字节。。。。。基本上愤怒的要崩溃了。。。。求大侠指点。
相关的定义部分
typedef unsigned char Symbol; /* any byte is encodable */
typedef struct HuffNode *HuffTree;
struct HuffNode {
Bool isExt; /* is this an external node? */
Symbol sym; /* defined if isExt only */
HuffTree branch[2]; /* defined if !isExt only */
};
// Open bit stream for reading from fp
BitStream BitStream_OpenRead(FILE *fp);
// Open bit stream for writing to fp
BitStream BitStream_OpenWrite(FILE *fp);
// Transfer nbits (0..CHAR_BIT) from data to bs
void BitStream_Put(BitStream bs, unsigned char data, int nbits);
// Return nbits (0..CHAR_BIT) from bs
unsigned char BitStream_Get(BitStream bs, int nbits);
递归版本
static unsigned char traverse_and_decode(HuffTree t, BitStream bs){
if (t->isExt == FALSE){
int j = BitStream_Get(bs, 1);
return traverse_and_decode(t->branch[j], bs);
}
return t->sym;
}
void HuffTree_Decode(HuffTree t, FILE *fin, FILE *fout, int num_bytes)
{
int i;
BitStream bsi, bso;
bsi = BitStream_OpenRead(fin);
bso = BitStream_OpenWrite(fout);
for (i=0; i<num_bytes; i++)
BitStream_Put(bso, traverse_and_decode(t, bsi) , CHAR_BIT);
BitStream_Close(&bso);
BitStream_Close(&bsi);
}
非递归版本
void HuffTree_Decode(HuffTree t, FILE *fin, FILE *fout, int num_bytes)
{
int i, j;
HuffTree tt;
BitStream bsi, bso;
bsi = BitStream_OpenRead(fin);
bso = BitStream_OpenWrite(fout);
for (i=0; i<num_bytes; i++){
tt=t;
while (tt->isExt==FALSE){
j = BitStream_Get(bsi,1);
tt=tt->branch[j];
}
BitStream_Put(bso, tt->sym, CHAR_BIT);
}
BitStream_Close(&bso);
BitStream_Close(&bsi);
}
相关推荐
【大数跨境-2024研报】2024高尔夫装备市场洞察报告.pdf
行业研究报告、行业调查报告、研报
全要素网格化管理项目建设方案WORD
本资料来源公开网络,仅供个人学习,请勿商用,如有侵权请联系删除,更多浏览公众号:智慧方案文库。目录第一章 项目概述1.1 建设背景1.2 建设原则1.3 建设目标第二章 现状分析第三章 建设思路3.1 整体思路3.2 建设亮点3.2.1 大数据分析决策3.2.2 深化便民举措第四章 总体建设方案4.1 设计依据4.2 总体架构4.2.1 基础设施层4.2.2 数据资源层4.2.3 支撑层4.2.4 应用层第五章 总体建设内容第六章 工作管理后台。
2021年度高尔夫行业人力资源效能分析报告(市场招聘用工).pdf
2021年度高尔夫行业人力资源效能分析报告(市场招聘用工).pdf
高尔夫球,南韩前8强生产商排名及市场份额.pdf
QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。 邮箱:market@qyresearch.com
高尔夫握把,全球前5强生产商排名及市场份额 (1).pdf
高尔夫握把,全球前5强生产商排名及市场份额 (1).pdf


