使用 redis 中的 lzf 压缩算法

lzfP.h:对 lzf.h 和 lzfP.h 的合并
lzfP.cpp:对 lzf_c.c 和 lzf_d.c 的合并

lzf.h:https://github.com/huangz1990/redis-3.0-annotated/blob/unstable/src/lzf.h
lzfP.h:https://github.com/huangz1990/redis-3.0-annotated/blob/unstable/src/lzfP.h
lzf_c.c:https://github.com/huangz1990/redis-3.0-annotated/blob/unstable/src/lzf_c.h
lzf_d.c:https://github.com/huangz1990/redis-3.0-annotated/blob/unstable/src/lzf_d.h

#include <iostream>
#include <string>
#include "lzfP.h"
using namespace std;

int main() 
{
	string value = "hello world hello world hello world hello world"; 
	size_t len = value.size();  // 字符串未压缩前的长度
	cout << "压缩前:val = " << value << endl;
	cout << "压缩前:len = " << len << endl << endl;

	// -------------------压缩---------------------------------
	size_t comprlen;  // 压缩后的长度
	size_t outlen;    // 输出缓存的最大长度
	unsigned char byte;
	int n, nwritten = 0;
	void *out;
	
	/* We require at least four bytes compression for this to be worth it */
	if (len <= 4) 
	{
		cout << "len <= 4" << endl;
		return 0;
	}
	
	outlen = len-4;
	
	if ((out = malloc(outlen+1)) == NULL) 
	{
		cout << "out = malloc(outlen+1)" << endl;
		return 0;
	}
	
	comprlen = lzf_compress(value.data(), len, out, outlen);  
	
	if (comprlen == 0) 
	{
		cout << "outlen == " << outlen << endl;
		cout << "comprlen == 0" << endl;
        		free(out);
        		return 0;
	}

	cout << "压缩后:val = " << out << endl;
	cout << "压缩后:len = " << comprlen << endl << endl;
	
	// -------------------解压缩---------------------------------
	char  *val = NULL;

   	 // 字符串空间
    	if ((val = (char*)malloc(len)) == NULL) 
	{
		cout << "lzf_decompress" << endl;
		return 0;
	}

   	 // 解压,得出字符串
   	 if (lzf_decompress(out, comprlen, val, len) == 0) 
	{
		cout << "lzf_decompress" << endl;
		return 0;
	}

	cout << "解压后:val = " << val << endl;
	cout << "解压后:len = " << len << endl;

   	 free(out);
	free(val);
	
	getchar();
	getchar();
	getchar();
	getchar();
   	return 0;
}

在这里插入图片描述

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值