Files
c_progarm/huffman/hello.c

105 lines
2.4 KiB
C
Raw Normal View History

2023-11-22 18:02:53 +08:00
#include "stdio.h"
#include "string.h"
// #include "coder_lib.h"
2023-11-23 21:05:27 +08:00
// #include "huffman.h"
#include "huffman_.h"
#include <stdlib.h>
2023-11-22 18:02:53 +08:00
// 验证管壳码算法
// int main(int num,char *str[]){
// uint8_t d_[12]={0};
// char uid[20]={0};
// coder_shell_to_uid("2023","5830628A00004",uid);
// printf("uid=%s\r\n",uid);
// coder_uid_to_save(uid,d_);
// printf("slave:, uid_pw=%02X %02X %02X %02X %02X %02X %02X %02X "
// "%02X %02X %02X %02X ",d_[0],d_[1],d_[2],d_[3],d_[4],d_[5],d_[6],d_[7],
// d_[8],d_[9],d_[10],d_[11]);
// return 0;
// }
// 验证huffman算法
2023-11-23 21:05:27 +08:00
// int main(int argc, char *argv[])
// {
// uint8_t str_in[]="2023 5830628A000005830628A000015830628A000025830628A000035830628A000045830628A000055830628A000065830628A000075830628A000085830628A00009";
// array_def *a=arr_creat();
// arr_appends(a,str_in,strlen(str_in));
// array_def *out=hm_encode(a);
// printf("endode:%s\n",arr_string(out));
// array_def *de=hm_decode(out);
// printf("decde:%s\n",arr_data(de));
// return 0;
// }
long calc_file_size(FILE *stream)
{
long file_size = -1;
long cur_offset = ftell(stream); // 获取当前偏移位置
if (cur_offset == -1) {
printf("ftell failed :%s\n", strerror(errno));
return -1;
}
if (fseek(stream, 0, SEEK_END) != 0) { // 移动文件指针到文件末尾
printf("fseek failed: %s\n", strerror(errno));
return -1;
}
file_size = ftell(stream); // 获取此时偏移值,即文件大小
if (file_size == -1) {
printf("ftell failed :%s\n", strerror(errno));
}
if (fseek(stream, cur_offset, SEEK_SET) != 0) { // 将文件指针恢复初始位置
printf("fseek failed: %s\n", strerror(errno));
return -1;
}
return file_size;
}
int encode_file(const char *filename)
{
FILE *f=fopen(filename, "rb");
int file_size=calc_file_size(f);
uint8_t *file_data=calloc(file_size+1,sizeof(uint8_t));
uint8_t *encode_data=0;
int encode_size;
fread(file_data,1,file_size,f);
hm_encode(file_data,file_size,&encode_data,&encode_size);
free(file_data);
free(encode_data);
fclose(f);
}
2023-11-22 18:02:53 +08:00
int main(int argc, char *argv[])
{
2023-11-23 21:05:27 +08:00
encode_file(argv[1]);
// const uint8_t file_data[]="2023 5830628A000005830628A000015830628A000025830628A000035830628A000045830628A000055830628A000065830628A000075830628A000085830628A00009";
// uint8_t *encode_data=0;
// int encode_size;
// hm_encode(file_data,sizeof(file_data),&encode_data,&encode_size);
2023-11-22 18:02:53 +08:00
return 0;
}
2023-11-23 21:05:27 +08:00