在c / c ++中压缩/检查数据损坏的文件

时间:2012-07-07 17:53:20

标签: c++ c

对于不一定是文本的大型文件或其他文件,我如何压缩它们以及检查数据损坏的最有效方法是什么?任何有关这些算法的教程都将不胜感激。

3 个答案:

答案 0 :(得分:2)

对于压缩,LZO应该会有所帮助。易于使用和库容易。 对于数据损坏检查,CRC ca http://cppgm.blogspot.in/2008/10/calculation-of-crc.html

答案 1 :(得分:2)

对于一般压缩,我会建议使用霍夫曼编码。它非常容易学习,如果您理解,可以在<4小时内编写全功能(2遍)编码器/解码器。它是DEFLATE的一部分,它是.zip格式的一部分。一旦你完成了这个,学习LZ77,然后将它们放在一起,并进行自己的DEFLATE实现。

或者,使用zlib,每个人都使用的库用于zip文件。

对于大文件,我不推荐CRC32,就像每个人都在告诉你的那样。较大的文件很容易受到生日腐败的影响。我的意思是,随着文件变大,32位校验和只能找到越来越有限的错误。快速实现哈希 - 比方说,MD5 - 会对你有好处。是的,MD5在加密方面已被破解,但考虑到您的问题,我假设您没有处理安全问题。

答案 2 :(得分:1)

汉明码是可能的。想法是在每N个数据位处插入几个和位,并用0或1初始化它们中的每一个,使得一些数据位和和位的总和始终为1。如果sum不是1,查看这些sum-bits的值,就可以看到丢失了哪些数据位。

正如之前的帖子所说,还有很多其他的可能性。

http://en.wikipedia.org/wiki/Hamming_code#General_algorithm