zlib是一个压缩库,封装了多个算法,我们这里使用的是zip。
一、准备zlib的LINUX及C#库
zlib项目地址:
zlib.net项目地址(for C#):
二、操作函数
在C#下压缩解压:
using ZLibNet;
/// <summary>zip压缩字符串</summary>
/// <param name="input">utf8格式数据</param>
public byte[] compress(byte[] input)
{
byte[] output = ZLibCompressor.Compress(input);
return output;
}
/// <summary>zip解压字符串</summary>
/// <param name="param">utf8格式数据</param>
public byte[] decompress(byte[] input)
{
byte[] output = ZLibCompressor.DeCompress(input);
return output;
}
在LINUX下压缩解压:
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <zlib.h>
int main(int argc, char* argv[])
{
unsigned char text[] = "12345678";
uLong tlen = strlen(text); //压缩前的长度
unsigned char* buf = NULL;
uLong blen; //压缩后的长度
int i=0;
/* 计算缓冲区大小,并为其分配内存 */
blen = compressBound(tlen); /* 压缩后的长度*/
if((buf = (char*)malloc(sizeof(char) * blen)) == NULL)
{
printf("no enough memory!\n");
return -1;
}
/* 压缩 */
if(compress(buf, &blen, text, tlen) != Z_OK)
{
printf("compress failed!\n");
return -1;
}
/* 解压缩 */
if(uncompress(text, &tlen, buf, blen) != Z_OK)
{
printf("uncompress failed!\n");
return -1;
}
/* 打印结果,并释放内存 */
if(buf != NULL)
{
free(buf);
buf = NULL;
}
return 0;
}