⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 demo_decoder.c

📁 自适应算术编解码
💻 C
字号:
#include <stdio.h>
#include <stdlib.h>
#include "ac.h"
#include "bmp.h"
#define check(b,m) \
do {\
if (b){\
printf(stderr, m);\
exit(1);\
}\
} while(0)

#define ADAPT 1
#define NSYM 256
#define Code_value_bits 16#define Top_value (((long)1<<Code_value_bits)-1)

int main(int argc, char* argv[])
{
	FILE *fp;
	int c;
	unsigned short identifier;
	ac_decoder acd;
	ac_model acm;
	Header *header;
	Info *info;
	int i;
	check(argc < 3, "usage : with argument srcfilename dstfilename");
// init
	acd.fp = fopen (argv[1], "rb");	check (!acd.fp, "arithmetic decoder could not open file");// 
	fp = fopen(argv[2], "wb");
	check(!fp, "could not open destination file to write");

	fread((void*)&identifier, 2, 1, acd.fp); // read identifier
	check(identifier != 0x4D42, "please give me a right compressed file!");

	header = (Header*)malloc(sizeof(Header)); // read header
	fread((void*)header, sizeof(Header), 1, acd.fp);

	info = (Info*)malloc(sizeof(Info)); //read info
	fread((void*)info, sizeof(Info), 1, acd.fp);
	check((info->compression & 8) == 0, "not a commpressed file!");
	info->compression ^= 8;

	fwrite((void*)&identifier, 2, 1, fp); // write identifier
	fwrite((void*)header, sizeof(Header), 1, fp); // write header
	fwrite((void*)info, sizeof(Info), 1, fp); // write info

	header->offset -= (sizeof(Header) + sizeof(Info)); // write left
	while(header->offset > 0) {
		fputc(fgetc(acd.fp), fp);
		(header->offset)--;
	}
	// encode
	ac_decoder_init(&acd);	ac_model_init(&acm, NSYM, NULL, ADAPT);
	while (info->datasize > 0) {
		c = ac_decode_symbol(&acd, &acm);
		fputc(c, fp);
		(info->datasize)--;
	}

	ac_decoder_done(&acd);
	ac_model_done(&acm);
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -