|
Minilzo解压缩算法能分段压缩与解压吗?
当一个文件有10MB,MCU内存只有几百KB,能分段解压数据吗?
#define HEAP_ALLOC(var,size) \
lzo_align_t __LZO_MMODEL var [ ((size) + (sizeof(lzo_align_t) - 1)) / sizeof(lzo_align_t) ]
static HEAP_ALLOC(wrkmem, LZO1X_1_MEM_COMPRESS);
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define MAX 1024*128
void CDEMODlg::OnOK()
{
// TODO: Add extra validation here
unsigned char in[MAX]={0},out[MAX]={0},new_in[MAX]={0},v=0,data[MAX]={0};
unsigned long in_len=sizeof(in),out_len=0,new_len=0;
CString s;
unsigned long t_len=0;
srand( (unsigned)time( NULL ) );
for (int j=0; j<sizeof(in); j++)
{
if (j%1000==0) v=(unsigned char)(rand()%256);
data[j]=v;
}
memcpy(in,data,sizeof(data));
in_len=sizeof(data);
lzo1x_1_compress(in,in_len,out,&out_len,wrkmem);
lzo1x_decompress(out,out_len/2,new_in,&t_len,NULL); new_len=t_len;
lzo1x_decompress(&out[out_len/2],out_len/2,&new_in[t_len],&t_len,NULL); new_len+=t_len;
int x=sizeof(wrkmem);
for (int i=0; i<sizeof(data); i++)
{
if (data[i]!=new_in[i]) break;
}
s.Format("OK,原始长度:%d,压缩长度:%d",sizeof(data),out_len);
if (i>=sizeof(in)) MessageBox(s);
else MessageBox("Error");
// CDialog::OnOK();
}
|
|