[Qt C++]对酷狗krc文件进行解码

来源:互联网 发布:linux 增加home空间 编辑:程序博客网 时间:2024/05/15 10:26

        按照http://www.52pojie.cn/thread-286822-1-1.html 的方法,用楼主提供的E语言代码,改写了一个C++的。程序用到了Zlib库进行解码,请参看我上一篇文章。(http://blog.csdn.net/sunnysab/article/details/46672949)。 解码的方法很简单,所以代码也不长。首先读入文本,然后与Keys进行异或操作,再使用Zlib库进行解压缩。解压缩后的数据如图:

         只是不知道每个字之前的标签代表的是什么意思。代码如下:

#include <QCoreApplication>#include <QFile>#include <QDebug>#include "zlib.h"const int   Keys[] =  {64, 71, 97, 119, 94, 50, 116, 71, 81, 54, 49, 45, 206, 210,                 110, 105};typedef int  CONVERT_CODE;#define   CONVERT_SUCCESS       0x00#define   CONVERT_FILE_EMPTY    0x01#define   CONVERT_PARA_ERR      0x02#define   CONVERT_FORMAT_ERR    0x03#define   CONVERT_UNKNOWN       0x04/* * 函  数: KrcDecode * 功  能: 对KRC文件进行解码 * 参  数: QFile  &KrcFile   要解码的krc文件 *        QFile  &LrcFile   解码后的lrc文件 * 返回值: 类型 CONVERT_CODE *        如果函数执行成功, 返回CONVERT_SUCCESS; */CONVERT_CODE  KrcDecode(QFile  &KrcFile, QFile  &LrcFile){    CONVERT_CODE  nRet = CONVERT_PARA_ERR;     if (KrcFile.isOpen() != false && LrcFile.isOpen() != false)    {        QByteArray   KrcData;        QByteArray   DecodeData;        QByteArray   LrcData;         KrcFile.seek(0);        KrcData = KrcFile.readAll();         if (false == KrcData.isEmpty())        {            // 校验开头 4 字符是否为正确            if (KrcData.left(4) == "krc1")            {                KrcData.remove(0, 4);  // 去除文件头标识                 // XOR 大法解码                for (int i = 0; i < KrcData.size(); i++)                {                    DecodeData.append((char)(KrcData[i] ^ Keys[i % 16]));                }                // 解压缩数据                if (ZlibUncompress(LrcData, DecodeData, NULL) != -1)                {                    LrcFile.write(LrcData);                     nRet = CONVERT_SUCCESS;                }                else                {                    nRet = CONVERT_FORMAT_ERR;                }            }            else            {                nRet = CONVERT_FORMAT_ERR;            }        }        else        {            nRet = CONVERT_FILE_EMPTY;        }    }    return nRet;}


0 0
原创粉丝点击