请问如何处理字符串的压缩和解压缩?

时间:2021-10-21 11:34:00
请各位大侠提供一些思路,我采用的是huffman算法,但是总是不能正确的解压缩字符串,不知道什么原因,请帮帮忙,看看应该往压缩流里写入些什么信息才能正确的解压缩字符串 ……?

15 个解决方案

#1


纪录编码表!

#2


to prog_st(st):能不能说的具体些?或者描述一下实现过程?先谢过。

#3


怎么没有人回答啊?
是问题太简单?
还是给的分太少啊?

#4


表达详细一些
我做过txt2tiff-f的转化程序
对huffman略有了解

#5


to fhaibo(阿P): 如果可能的话,你能不能详细的描述一下关于字符串的压缩和解压缩过程?我现在的状况是:对于文件,可以正确的压缩和解压缩,因为我把文件的原长度写入了压缩文件,解压缩时先读了出来,但是,对于字符串,我在解压缩时如何得到字符串的原长呢?请问字符串的解压缩需要得到愿字符串的哪些信息呢?
注:哪位大侠有关于字符串压缩和解压缩的源码吗?(不管什么算法都可以的),mail 一个给我好吗?很着急啊。 
我的邮箱是:jeffery_chen@263.net  先多谢啦。

#6


to fhaibo(阿P): 如果可能的话,你能不能详细的描述一下关于字符串的压缩和解压缩过程?我现在的状况是:对于文件,可以正确的压缩和解压缩,因为我把文件的原长度写入了压缩文件,解压缩时先读了出来,但是,对于字符串,我在解压缩时如何得到字符串的原长呢?请问字符串的解压缩需要得到愿字符串的哪些信息呢?
注:哪位大侠有关于字符串压缩和解压缩的源码吗?(不管什么算法都可以的),mail 一个给我好吗?很着急啊。 
我的邮箱是:jeffery_chen@263.net  先多谢啦。

#7



不知道你要编写的是字符串的压缩程序还是解压缩程序,如果写的是压缩程序而解压缩是别人的程序,那就必须遵守一定的文件头格式标准,可以查阅rfc相关的文档.
huffman的压缩原理:
如果有一个码流:0000001111111111
有6个连续白点八个连续黑点
     表:terminating white codes
          code     lng    run
          ...................
          ..................5
          1110       4      6
          ..................7
    表:terminating black codes
          code     lng    run
          ...................
          ..................7
          000101   6        8
          ..................9

那么压缩码流就是1110000101
这就是压缩过程
码对应表可查阅rfc804

不知道你为什么要强调文件的原长度
其实解压缩软件只对压缩后的文件长度感兴趣
你可能是用别人写的类吧
那就不清楚了

#8


to fhaibo(阿P):
我用的的确是别人的解压缩函数,那个函数要求传入两个参数,其中一个就是原文件的长度(或者原字符串的长度),解码函数利用这个参数将解码后的字节填充到缓冲区并还原到压缩前的长度,我试过了,对文件可以正确操作,但是字符串不行,所以我怀疑对字符串的压缩和解压缩与文件不一样,也就是在说可能要在压缩流里写入一些原始字符串的信息(至于是什么信息,我也不知道),以便正确的解码,这只是我的一点推测,不知道是不是这样?
请问你做过字符串的压缩吗?怎样解的码?
谢谢, 请多关照!

#9


字符串和文件对于解压缩函数都是一样的
文件也是字符串流
你的解压缩函数与压缩函数函数原型?


#10


to fhaibo(阿P):
void Encode();
void Decode(unsigned int uBlockSize,unsigned char puchBuff[]);
其中的 uBlockSize 就是原文件或字符串的长度,我把原文件的长度传入后,就得到了解压缩后的文件字符串流,但是我该怎么得到原字符串的长度呢?难道也将其长度写入压缩后的字符串首,在解压缩后将其读出?这样可能吗?我试过了,好象总是取不到正确的长度?
请多关照。

#11


有几个疑问?
Encode()没有任何参数?
那你的文件怎么给Encode去压缩?难道有一个默认文件名?
那个puchBuff参数是解压缩后的字符串流?那压缩流怎么给Decode()?
难道也是有一个默认的要解压缩的文件?

你不是说可以对文件解压缩吗?
大不了你把你要压缩的字符串流写进文件,
在解压缩你该文件;最后该文件中提起你所要的字符串

#12


很可惜的是我做的只是压缩字符串的工作
没有涉及到解压缩的工作,
解压缩的算法比压缩还烦

#13


我以前做过这个数据压缩算法的课题,有程序,如果想要的话,
告诉我!

#14


to kenvin(肖哗):
请mail一个给我,谢谢。
我的邮箱是:jeffery_chen@263.net

to fhaibo(啊P):
1)、Encode()里没有任何参数,但是它是类CDemo的一个成员函数,我把它重新定义为:CDemo::Encode(),并在类里定义了两个成员变量:FILE* file_input,*file_output,在Encode()中引用了这两个成员变量,所以能够进行读写。
2)、关于CDemo::Decode(unsigned int iBlockSize,unsigned char puchBuff[]),其传参的原理和Encode()基本一样,关键就是要取得 iBlockSize 的长度,以开辟适当的缓冲区来存储。

#15


多谢 fhaibo(阿P),问题已经解决。

#1


纪录编码表!

#2


to prog_st(st):能不能说的具体些?或者描述一下实现过程?先谢过。

#3


怎么没有人回答啊?
是问题太简单?
还是给的分太少啊?

#4


表达详细一些
我做过txt2tiff-f的转化程序
对huffman略有了解

#5


to fhaibo(阿P): 如果可能的话,你能不能详细的描述一下关于字符串的压缩和解压缩过程?我现在的状况是:对于文件,可以正确的压缩和解压缩,因为我把文件的原长度写入了压缩文件,解压缩时先读了出来,但是,对于字符串,我在解压缩时如何得到字符串的原长呢?请问字符串的解压缩需要得到愿字符串的哪些信息呢?
注:哪位大侠有关于字符串压缩和解压缩的源码吗?(不管什么算法都可以的),mail 一个给我好吗?很着急啊。 
我的邮箱是:jeffery_chen@263.net  先多谢啦。

#6


to fhaibo(阿P): 如果可能的话,你能不能详细的描述一下关于字符串的压缩和解压缩过程?我现在的状况是:对于文件,可以正确的压缩和解压缩,因为我把文件的原长度写入了压缩文件,解压缩时先读了出来,但是,对于字符串,我在解压缩时如何得到字符串的原长呢?请问字符串的解压缩需要得到愿字符串的哪些信息呢?
注:哪位大侠有关于字符串压缩和解压缩的源码吗?(不管什么算法都可以的),mail 一个给我好吗?很着急啊。 
我的邮箱是:jeffery_chen@263.net  先多谢啦。

#7



不知道你要编写的是字符串的压缩程序还是解压缩程序,如果写的是压缩程序而解压缩是别人的程序,那就必须遵守一定的文件头格式标准,可以查阅rfc相关的文档.
huffman的压缩原理:
如果有一个码流:0000001111111111
有6个连续白点八个连续黑点
     表:terminating white codes
          code     lng    run
          ...................
          ..................5
          1110       4      6
          ..................7
    表:terminating black codes
          code     lng    run
          ...................
          ..................7
          000101   6        8
          ..................9

那么压缩码流就是1110000101
这就是压缩过程
码对应表可查阅rfc804

不知道你为什么要强调文件的原长度
其实解压缩软件只对压缩后的文件长度感兴趣
你可能是用别人写的类吧
那就不清楚了

#8


to fhaibo(阿P):
我用的的确是别人的解压缩函数,那个函数要求传入两个参数,其中一个就是原文件的长度(或者原字符串的长度),解码函数利用这个参数将解码后的字节填充到缓冲区并还原到压缩前的长度,我试过了,对文件可以正确操作,但是字符串不行,所以我怀疑对字符串的压缩和解压缩与文件不一样,也就是在说可能要在压缩流里写入一些原始字符串的信息(至于是什么信息,我也不知道),以便正确的解码,这只是我的一点推测,不知道是不是这样?
请问你做过字符串的压缩吗?怎样解的码?
谢谢, 请多关照!

#9


字符串和文件对于解压缩函数都是一样的
文件也是字符串流
你的解压缩函数与压缩函数函数原型?


#10


to fhaibo(阿P):
void Encode();
void Decode(unsigned int uBlockSize,unsigned char puchBuff[]);
其中的 uBlockSize 就是原文件或字符串的长度,我把原文件的长度传入后,就得到了解压缩后的文件字符串流,但是我该怎么得到原字符串的长度呢?难道也将其长度写入压缩后的字符串首,在解压缩后将其读出?这样可能吗?我试过了,好象总是取不到正确的长度?
请多关照。

#11


有几个疑问?
Encode()没有任何参数?
那你的文件怎么给Encode去压缩?难道有一个默认文件名?
那个puchBuff参数是解压缩后的字符串流?那压缩流怎么给Decode()?
难道也是有一个默认的要解压缩的文件?

你不是说可以对文件解压缩吗?
大不了你把你要压缩的字符串流写进文件,
在解压缩你该文件;最后该文件中提起你所要的字符串

#12


很可惜的是我做的只是压缩字符串的工作
没有涉及到解压缩的工作,
解压缩的算法比压缩还烦

#13


我以前做过这个数据压缩算法的课题,有程序,如果想要的话,
告诉我!

#14


to kenvin(肖哗):
请mail一个给我,谢谢。
我的邮箱是:jeffery_chen@263.net

to fhaibo(啊P):
1)、Encode()里没有任何参数,但是它是类CDemo的一个成员函数,我把它重新定义为:CDemo::Encode(),并在类里定义了两个成员变量:FILE* file_input,*file_output,在Encode()中引用了这两个成员变量,所以能够进行读写。
2)、关于CDemo::Decode(unsigned int iBlockSize,unsigned char puchBuff[]),其传参的原理和Encode()基本一样,关键就是要取得 iBlockSize 的长度,以开辟适当的缓冲区来存储。

#15


多谢 fhaibo(阿P),问题已经解决。