如何检测字符串是用C ++中的LZW算法压缩的

时间:2014-06-24 09:07:29

标签: c++ lzw

我有两个xml文件,一个是LZW压缩的,另一个是纯文本。我怎么知道是否压缩了?

4 个答案:

答案 0 :(得分:4)

显而易见的事情当然是将字符串提供给LZW解压缩器并查看是否存在错误和/或字符串的长度增加了大约200%。

除此之外,(格式良好的)LZW字符串或文件标有magic value 0x1F 0x9D。当然LZW可以压缩字符串而包含魔术值,但它是一个开始(非常容易检查)。

一个(格式良好的)XML文档应该以XML声明开头,必须以元素开头,只能选择前面有空格。 XML声明以字符串<?xml开头,元素标签必须以字母开头 因此,如果您在遇到第一个<之前看到除空白之外的任何内容,或者后面的下一个字符不是?或字母(并且在遇到>之前只跟着字母和数字) ),然后字符串不能是XML。由于您知道该字符串是XML或压缩XML,因此必须对其进行压缩。对于那些有一点正则表达式练习的人来说,用10-15个字符模式来挤压它可能很容易。

答案 1 :(得分:0)

愚蠢的简单测试:第一个字符是<吗?

答案 2 :(得分:0)

查找无效或无意义的字符(如空字符)。如果它们存在,那么它就被压缩了。

如果没有,那么要么是普通的XML,要么文件非常小(否则这种情况极不可能)。

答案 3 :(得分:0)

如果您想知道它是否已被压缩,这将有所帮助,因此您可以解压缩该文件,并且您愿意使用库来进行繁重的工作:

使用压缩库始终尝试解压缩文件。让它决定文件是否被压缩。之后,将生成的文件传递给xml库,让该库决定您是否有一个有效的和预期的xml文件。如果可能的话,不要重新创建公共库的功能,只需确保对库的返回信息采取适当的行动。