急~~~~~无损压缩算法!!!!
各位同人:
在下也乱写了一点,但是怎么做?我无法理解???请各位帮帮忙(c语言实现)
BYTE* compress(BYTE* data_in, DWORD size_in)
{
DWORD i;
BYTE* data_out = NULL;
data_out = (BYTE*)(malloc(size_in));
BYTE bTemp;
data_out[0] = data_in[0];
for (i=0; i<size_in-1; i++)
{
bTemp=data_in[i+1]-data_in[i];
if (bTemp<=7&&bTemp>=-7)
{
data_out[i+1] = 0x8;
data_out[i+1] |= bTemp;
}
else if ((bTemp>7&&bTemp<128)||(bTemp<-7&&bTemp>-128))
{
data_out[i+1] = 0x80;
data_out[i+1] |= bTemp;
}
else
{
data_out[i+1] = 0x800;
data_out[i+1] |= bTemp;
}
}
return data_out;
}
以下是压缩算法:①标志数据记录开始;②记录第一个数据(两字节),存入RAM;③采集一数据(两字节),与前一数据相减,对差值进行判断:若在[-7,7]之间,取差值低四位存入RAM;否则,若在[-127,-8]和[8,127]之间,先存入标志0X8(二进制四位),取差值低八位存入RAM;否则,先存入标志0X880(二进制十二位),取差值十六位存入RAM;④重复步骤③直到采集结束或RAM用完;⑤标志数据记录结束.
解压算法如下:①读出数据记录开始标志;②读入第一个数据(两字节);③读入半个字节,对其进行判断;若非0X8,将其直接转换为整数,四位中最高位为符号位;否则,再读入一个字节,若非0X80,将其直接转换为整数,八位中最高位为符号位;否则,再读入两个字节,将其直接转换为整数;④将此整数与前一数据相加,和即为当前数据;⑤重复步骤③、④直到数据结束标志.……