0

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

4

3 回答 3

2

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

于 2012-07-09T05:22:39.897 回答
2

对于一般压缩,我建议使用 Huffman 编码。它非常容易学习,如果您理解它,可以在 <4 小时内编写一个功能齐全的(2-pass)编码器/解码器。它是 DEFLATE 的一部分,它是 .zip 格式的一部分。完成后,学习 LZ77,然后将它们组合在一起并制作自己的 DEFLATE 实现。

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

对于大文件,我不会像每个人都告诉你的那样推荐 CRC32。较大的文件很容易遭受生日损坏。我的意思是,随着文件变大,32 位校验和只能发现越来越有限的错误。散列的快速实现——比如说,MD5——会很好。是的 MD5 被密码破解,但我假设,考虑到你的问题,你没有解决安全意识问题。

于 2012-07-09T05:29:21.143 回答
1

汉明码是一种可能性。这个想法是在每N位数据插入几个和位,并将它们中的每一个初始化为0或1,使得一些数据位和和位之和始终为1。在总和不是 1 的情况下,查看这些总和位的值,您可以看到丢失了哪些数据位。

正如上一篇文章所说,还有很多其他的可能性。

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

于 2012-07-07T18:04:18.743 回答