📄 demo_decoder.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 + -