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
|
|
|
|