博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用miniLZO微型压缩库进行压缩和解压缩
阅读量:6222 次
发布时间:2019-06-21

本文共 2127 字,大约阅读时间需要 7 分钟。

hot3.png

LZO是一个开源的无损压缩C语言库,其优点是压缩和解压缩比较迅速占用内存小等特点(网络传输希望的是压缩和解压缩速度比较快,压缩率不用很高),其还有许多其他的优点详细参考其网站:

关于这个库性能的介绍可以参考

下载minilzo-2.06.tar.gz压缩包之后,注意里面提供了1个C文件3个头文件,分别是minilzo.c,minilzo.h,lzoconf.h,lzodefs.h。

上代码吧!使用时包含minilzo.h头文件,注意lzo1x_1_compress和lzo1x_decompress两个函数。

//测试代码#include 
#include "minilzo.h" //注意头文件 #include 
#include 
using namespace std;#define IN_LEN 1024#define OUT_LEN 1024static unsigned char __LZO_MMODEL in  [ IN_LEN ];static unsigned char __LZO_MMODEL out [ OUT_LEN ];#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);int main(){    lzo_uint in_len;    lzo_uint out_len;    lzo_uint new_len;    if (lzo_init() != LZO_E_OK)    {        printf("internal error - lzo_init() failed !!!\n");        printf("(this usually indicates a compiler bug - try recompiling\nwithout optimizations, and enable '-DLZO_DEBUG' for diagnostics)\n");        return 3;    }    /*压缩过程*/    in_len = IN_LEN;    lzo_memset(in,0,in_len);    in[0] = 0x11;    in[1] = 0x11;    in[2] = 0x11;        //将in压缩成out    int r = lzo1x_1_compress(in,in_len,out,&out_len,wrkmem);    if (r == LZO_E_OK)        printf("compressed %lu bytes into %lu bytes\n",            (unsigned long) in_len, (unsigned long) out_len);    else    {        /* this should NEVER happen */        printf("internal error - compression failed: %d\n", r);        return 2;    }        //out_len是压缩后的缓冲区长度    printf("out[0]=%02x, outlen=%d\n",out[0],out_len);        /*解压缩过程*/    new_len = in_len;    //将out解压缩成in    r = lzo1x_decompress(out,out_len,in,&new_len,NULL);    if (r == LZO_E_OK && new_len == in_len)        printf("decompressed %lu bytes back into %lu bytes\n",            (unsigned long) out_len, (unsigned long) in_len);    else    {        /* this should NEVER happen */        printf("internal error - decompression failed: %d\n", r);        return 1;    }    //in_len是解压缩后还原的长度    printf("in[0]=%02x, inlen=%d\n",in[0], in_len);    return 0;}

转载于:https://my.oschina.net/crooner/blog/262486

你可能感兴趣的文章
转oracle 学习- 数据类型
查看>>
Eclipse安装插件支持jQuery智能提示
查看>>
cidaemon.exe进程cpu占用率高及关闭cidaemon.exe进程方法
查看>>
C语言课程设计—图书管理系统
查看>>
iOS 多线程
查看>>
【BZOJ】1096: [ZJOI2007]仓库建设(dp+斜率优化)
查看>>
SQL删除重复数据方法
查看>>
C#资源文件与与资源名称字符串之间的互相转化
查看>>
[Unity][Heap sort]用Unity动态演示堆排序的过程(How Heap Sort Works)
查看>>
调试项目出错------360云盘同步搞的鬼
查看>>
sqlite建表语句(特别是外键问题)
查看>>
Android 刷新下拉控制 SwipeRefreshLayout
查看>>
Android 自定义View修炼-打造完美的自定义侧滑菜单/侧滑View控件(转)
查看>>
持久化框架Hibernate 开发实例(一)
查看>>
CentOS下php安装mcrypt扩展
查看>>
2015.10.14-TransactionScope测试
查看>>
Android中MediaMuxer跟MediaCodec用例
查看>>
缓冲区的运用
查看>>
细谈WEB标准
查看>>
经典SQL
查看>>