有爱,有技术,有你^_^)y
╱人◕‿‿◕人╲订下契约(注册新用户)

合作站点账号登陆

QQ登录

只需一步,快速开始

快捷导航
查看: 824|回复: 9
收起左侧

[求助] 谁来帮咱写出这个压缩程序?

 关闭 [复制链接]

签到天数: 1 天

连续签到: 1 天

[LV.1]初来乍到

248

主题

365

好友

3万

积分

傲娇娘

User your imagination Bitch!

积分
33328
发表于 2012-5-11 15:08:48 | 显示全部楼层 |阅读模式
悬赏1000宅币已解决
如下面的:
int NLZSS_11h_uncompress(char *inFileName,char *outFileName)
{
      FILE *ifp = fopen(inFileName,"rb");
      unsigned char FileID = getc(ifp);
      if(FileID != 0x11)
      {
            fclose(ifp);
            return -1;
      }

      unsigned int outFileSize = 0;
      fread(&outFileSize,3,1,ifp);

      fseek(ifp,0,2);
      unsigned int inFileSize = ftell(ifp)-4;
      fseek(ifp,4,0);
      unsigned char *inBuffer  = new unsigned char[inFileSize];
      fread(inBuffer,inFileSize,1,ifp);
      fclose(ifp);

      unsigned char *outBuffer  = new unsigned char[outFileSize];
      unsigned char *current_pos = outBuffer;
      memset(outBuffer,0,outFileSize);

      int backRefLength = 0,
          outputLength = 0,
          decomp_size = 0,
          mask = 0,
          count = 0;

      int flags = 0,
          i = 0;

      int r0 = 0,//待解压文件读取指针
          r1 = 0,//解压文件写入指针
          r2 = 0,//解压大小
          r3 = 0,//复制长度
          r4 = 0,//LZSS的控制位计数器
          r5 = 0,
          r6 = 0,
          r7 = 0,//作用未知,貌似总是1
          r12 = 0,//回溯距离
          r14 = 0;//LZSS的ID字节



      for( ; ; )
      {
            if(r4 == 0)
            {
                  flags = inBuffer[r0++];
                  r4 = 8;
            }

            if( (flags&0x80) )//解压数据
            {
                  r5 = inBuffer[r0];

                  if( r5&0xE0 )//r5高三位不全为0
                  {
                        r6 = 1;
                        r3 = r6 + (r5>>4);//复制长度

                        r0++;
                        r5 &= 0x0F;
                        r12 = r5<<8;
                        r6 = inBuffer[r0++];
                        r5 = r6 | r12;
                        r12 = r5 + 1;//回溯距离
                  }
                  else//r5高三位全为0
                  {
                        r0++;
                        r6 = r5&0x0F;
                        r6 <<= 4;

                        if( r5&0x10 )//第5位不为0
                        {
                              r6 <<= 8;
                              r5 = inBuffer[r0++];
                              r6 += (r5<<4);
                              r6 += 0x100;
                              r6 += 0x11;
                              r5 = inBuffer[r0];
                              r3 = r6 + (r5>>4);//复制长度

                              r0++;
                              r5 &= 0x0F;
                              r12 = r5<<8;
                              r6 = inBuffer[r0++];
                              r5 = r6 | r12;
                              r12 = r5 + 1;//回溯距离
                        }
                        else
                        {
                              r6 += 0x11;
                              r5 = inBuffer[r0];
                              r3 = r6 + (r5>>4);//复制长度

                              r0++;
                              r5 &= 0x0F;
                              r12 = r5<<8;
                              r6 = inBuffer[r0++];
                              r5 = r6 | r12;
                              r12 = r5 + 1;//回溯距离

                        }
                  }

                  r1 += r3;
                  for( ;r3 > 0;r3--)
                  {
                        *current_pos++ = outBuffer[current_pos-outBuffer - r12];
                  }
            }
            else//直接输出
            {
                  *current_pos++ = inBuffer[r0++];
                  r1++;
            }

            if(r1 == outFileSize)
                  goto END;

            flags <<= 1;r4--;
      }


END:  FILE *ofp = fopen(outFileName,"wb");
      fwrite(outBuffer,outFileSize,1,ofp);
      _fcloseall();

      delete [] inBuffer;
      delete [] outBuffer;

      return 0;
}


更据上面的东东=。=写出想应的压缩程序,白托咯~~~~~~~~~~~~~~

最佳答案

查看完整内容

额。我在百度文库看到一个LZSS压缩算法的实现……我反正已经晕了#16! PLUS:我下载下来,用notepad++把Tab全部换成4个空格后,编译了一下,过了。然后试着用了一下,也OK,所以就发上来了…… http://wenku.baidu.com/view/e18770d376eeaeaad1f3307f.html

评分

参与人数 1宅币 +20 收起 理由
风音洛洛 + 20 o(* ̄▽ ̄*)ブ 发糖

查看全部评分

一直奋斗在起床的第一线!
回复

使用道具 举报

该用户从未签到

1

主题

8

好友

6606

积分

序章

积分
6606
发表于 2012-5-11 15:08:49 | 显示全部楼层
额。我在百度文库看到一个LZSS压缩算法的实现……我反正已经晕了#16!
PLUS:我下载下来,用notepad++把Tab全部换成4个空格后,编译了一下,过了。然后试着用了一下,也OK,所以就发上来了……

http://wenku.baidu.com/view/e18770d376eeaeaad1f3307f.html

评分

参与人数 1宅币 +10 贡献 +1 收起 理由
风音洛洛 + 10 + 1 o(* ̄▽ ̄*)ブ 发糖

查看全部评分

签名被小宅喵吞掉了~~~~(>_<)~~~~
回复

使用道具 举报

该用户从未签到

258

主题

314

好友

3万

积分

第二章

积分
35715
发表于 2012-5-11 20:40:28 | 显示全部楼层
本帖最后由 轻舟过 于 2012-5-11 20:48 编辑

好奇怪的需求
博客什么的求人气 http://bimania.org
回复

使用道具 举报

该用户从未签到

8

主题

11

好友

3239

积分

序章

积分
3239
发表于 2012-5-11 22:13:07 | 显示全部楼层
每太明白什么意思……
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复

使用道具 举报

签到天数: 1 天

连续签到: 1 天

[LV.1]初来乍到

248

主题

365

好友

3万

积分

傲娇娘

User your imagination Bitch!

积分
33328
 楼主| 发表于 2012-5-12 08:43:24 | 显示全部楼层
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复

使用道具 举报

该用户从未签到

2

主题

4

好友

1115

积分

Continue

积分
1115
发表于 2012-5-12 11:25:55 | 显示全部楼层
只有uncompress函数……你的意思是要逆推compress函数然后写出程序来么?

for(;;)这种东西……怎么感觉像是从别的某种代码里面机械拆出来的
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复

使用道具 举报

该用户从未签到

258

主题

314

好友

3万

积分

第二章

积分
35715
发表于 2012-5-12 12:56:35 | 显示全部楼层
搜了下貌似是Lempel–Ziv–Storer–Szymanski压缩算法,应该可以找到实现的源代码吧
博客什么的求人气 http://bimania.org
回复

使用道具 举报

签到天数: 1 天

连续签到: 1 天

[LV.1]初来乍到

248

主题

365

好友

3万

积分

傲娇娘

User your imagination Bitch!

积分
33328
 楼主| 发表于 2012-5-12 14:21:20 | 显示全部楼层
轻舟过 发表于 2012-5-12 12:56
搜了下貌似是Lempel–Ziv–Storer–Szymanski压缩算法,应该可以找到实现的源代码吧 ...

咱无力了
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复

使用道具 举报

签到天数: 3 天

连续签到: 1 天

[LV.2]偶尔看看I

1126

主题

319

好友

5万

积分

吃货

❤~(`・ω・´) 保【FSC】姆 (´・ω・`)~❤

积分
50565
发表于 2012-5-12 19:11:15 | 显示全部楼层
扩散~
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复

使用道具 举报

签到天数: 1 天

连续签到: 1 天

[LV.1]初来乍到

248

主题

365

好友

3万

积分

傲娇娘

User your imagination Bitch!

积分
33328
 楼主| 发表于 2012-5-17 12:10:23 | 显示全部楼层
ZodiacG 发表于 2012-5-12 11:25
只有uncompress函数……你的意思是要逆推compress函数然后写出程序来么?

for(;;)这种东西……怎么感觉像 ...

只能说是从游戏里拆的
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复

使用道具 举报

本版积分规则

小黑屋|技术宅(基宅) ( 粤ICP备18082987号-1 | 浙公网安备 33010902001746号 )

GMT+8, 2024-5-21 17:32 , Processed in 0.310717 second(s), 29 queries , Redis On.

Copyright © 2018 技术宅社区

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表