资讯详情

C++解压KRC文件

前一章介绍了如何使用Qt解压酷狗KRC本章继续介绍如何使用文件C 解压酷狗KRC文件。 前章链接:Qt解压酷狗KRC文件 注:该文件为64位动态库文件,包括:zconf.h、zlib.h、zlib.lib、zlib.dll 运行环境:VS2017 百度网盘地址:(https://pan.baidu.com/s/1IsvkVeZQ6ipPJUIjhZaQaw) 提取码:otmf

#include <iostream> #include <fstream> #include "include/zconf.h" #include "include/zlib.h" using namespace std;  void toLrcFile(const string &krcFileName, const string &lrcFileName) {  ///密码字节数组(解码前)  Bytef *encodeKrcBuffer = nullptr;  ///解码字节数组(解码后)  Bytef *decodeKrcBuffer = nullptr;  //解压后lrc字节数组  Bytef *lrcBuffer = nullptr;  ifstream fin(krcFileName, ios::in | ios::binary); //打开二进制读模式krc文件  if (fin.is_open())  {   fin.seekg(0, ios::end); ///将文件指针移动到文件末尾的位置   int size = fin.tellg(); ///获取文件指针位置(此位置为文件长度)   fin.clear();   //请注意,如果已经在文件末尾,则必须在调用此函数之前清除文件末尾的标志。   fin.seekg(0, ios::beg); ///将文件指针移动到文件开始位置   encodeKrcBuffer = new Bytef[size];   memset(encodeKrcBuffer, 0, size);   fin.read((char *)encodeKrcBuffer, size);   fin.close();   if (encodeKrcBuffer[0] == 'k' && encodeKrcBuffer[1] == 'r' && encodeKrcBuffer[2] == 'c' && encodeKrcBuffer[3] == '1')   {    //去除文件头标识    memcpy(encodeKrcBuffer, encodeKrcBuffer   4, size - 4);   }   decodeKrcBuffer = new Bytef[size - 4];   const int Keys[] = {64, 71, 97, 119, 94, 50, 116, 71, 81, 54, 49, 45, 206, 210, 110, 105};   for (int i = 0; i < size - 4; i  )   {    //xor法解码    decodeKrcBuffer[i] = encodeKrcBuffer[i] ^ Keys[i % 16];   }   //定义解压后文件的预期长度倍率,若下方ret返回值为-5,说明解压内存(lrcBuffer)不够,继续增加倍率   const int LRC_BUFFER_LEN_RATIO = 4;    ///定义解压后文件的预期大小   uLongf lrcBufferLen = (size - 4) * LRC_BUFFER_LEN_RATIO;    lrcBuffer = new Bytef[lrcBufferLen];   ///解压文件   int ret = uncompress(lrcBuffer, &lrcBufferLen, decodeKrcBuffer, (uLong)(size - 4));   if (ret != Z_OK)    return;   //写入lrc文件   ofstream fout(lrcFileName, ios::out | ios::binary);   if (fout.is_open())   {    fout.write((char *)lrcBuffer, lrcBufferLen);    fout.close();   }  } }  int main() {  string krcFileName = string("C:/Users/11864/Desktop/李常超 - 盗墓笔记·十年人间-f17fc56e5a5a474bb182dc3c694ab0a4-42388467-00000000.krc");  string lrcFileName = string("C:/Users/11864/Desktop/ShiNianRenJian.lrc");  toLrcFile(krcFileName, lrcFileName);   return 0; } 

标签: 三极管krc101m

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司