[Qt C++] 쿠 거 krc 파일 디 코딩

2662 단어 qt
대로http://www.52pojie.cn/thread-286822-1-1.html 의 방법 은 건물 주가 제공 한 E 언어 코드 로 C++ 의 것 을 바 꾸 었 다.프로그램 은 Zlib 라 이브 러 리 에 디 코딩 을 사 용 했 습 니 다. 이전 글 을 참조 하 십시오.(http://blog.csdn.net/sunnysab/article/details/46672949). 디 코딩 방법 은 매우 간단 하기 때문에 코드 도 길지 않다.먼저 텍스트 를 읽 은 다음 Keys 와 다른 작업 을 한 다음 Zlib 라 이브 러 리 를 사용 하여 압축 을 푼다.압축 해제 후의 데 이 터 는 그림 과 같다. [Qt C++]对酷狗krc文件进行解码_第1张图片
         단지 글자 마다 이전의 라벨 이 무슨 뜻 을 대표 하 는 지 모르겠다.코드 는 다음 과 같 습 니 다:
#include 
#include 
#include 
#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;
}

좋은 웹페이지 즐겨찾기