[Qt C++]对酷狗krc文件进行解码
按照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;
}
[Qt C++]对酷狗krc文件进行解码相关推荐
- 酷狗 KRC 文件的解析
清理硬盘发现以前写过一个进行一半的代码,这次补全并从硬盘删掉. 格式说明来自 https://shansing.com/read/392/ krc解码并解压缩后得到一个字符串,例子: [id:$000 ...
- 基于Qt的仿酷狗音乐播放器设计(二)
简述 在上一文"基于Qt的仿酷狗音乐播放器设计(一)"中,博主给出了仿酷狗界面的部分内容,在本文中将继续分析酷狗界面,并作出相应的分析. 下面我们来看一下酷狗界面中的左侧滑动页控制 ...
- php中文歌词,将酷狗krc歌词解析并转换为lrc歌词php源码
最近在进行一次对酷狗音乐歌词采集时发现酷狗音乐的歌词直接浏览都是"乱码",自己平时所见的歌词都是lrc格式的文本,这种酷狗专用的krc格式的显然是经过特别处理过的,平时用酷狗听音乐 ...
- Qt/C++ 模仿 酷狗音乐播放器
注:我重新用MarkDown来编辑文章,所以把以前的博文删掉了 大家的评论没有了,不好意思哈~ 一,先上图 主界面 搜索界面 菜单 模式和音量 托盘菜单 精准歌词 MV 二,遇到的问题 1. 刚开始不 ...
- Qt/C++ 模仿 酷狗音乐播放器Qt/C++ 模仿 酷狗音乐播放器
一,先上图 主界面 搜索界面 菜单 模式和音量 托盘菜单 精准歌词 MV 二,遇到的问题 1. 刚开始不知道如何缩放无边框程序,琢磨了许久... 2. 播放列表的的那一坨!!不知道怎么 ...
- 基于Qt的仿酷狗音乐播放器设计(一)
简述 其实在很早以前博主就有想用Qt写一个比较好的音乐播放器的想法,但由于平时上课的压力和以前对设计模式和代码规范做的不太好,一直没有进行.所以在这个寒假准备好好的设计一下.下面先简单的说明一下设计的 ...
- 酷狗的krc歌词文件的解析
酷狗的krc歌词文件的解析,弄了很久才知道krc文件是加密的,需要转成utf-8,解密,再转ASCII码显示,别人说的,后来找了好久代码,终于找到完整的. 就是两个类 import java.io.B ...
- 基于Qt的网络音乐播放器(四)酷狗API接口获取歌曲的搜索列表和歌曲的播放
2020博客之星年度总评选进行中:请为74号的狗子投上宝贵的一票! 我的投票地址:点击为我投票 文章目录 1.效果图 2.准备好前面获取的酷狗api接口 3.网络歌曲搜索实现 4.网络歌曲播放的实现 ...
- Qt模仿酷狗音乐的播放图标
手机酷狗音乐在播放的时候,中间有一个旋转图标,显示播放进度,如下所示. Qt模仿酷狗音乐的播放图标效果图: 头文件 #ifndef QWHKUGOUMUSICLABEL_H #define QWHKU ...
最新文章
- 深度观察|工业物联网的应用场景和市场潜力
- 安装配置RocketMQ,并配置Console
- android jni 调用java_Android 基于NDK的JNI开发 C调用java和java调用C
- Activiti Workflow HelloWorld 示例与测试环境搭建
- HTML中的一般标签、常用标签和表格
- 大一计算机论文_大学计算机论文
- em算法 c语言,EM算法原理与应用(附代码)
- Rapid miner
- so反编译为c语言,SO文件反汇编实践
- python考勤统计_公司HR统计考勤用这个函数公式,快速、准确完成,再也不加班了...
- GBK UTF-8 ASCLL url编码集合
- 内网穿透神器frp之进阶配置——stcp及p2p模式
- make: texi2dvi command not found 解决方法
- “科大讯飞杯”第十七届同济大学程序设计预选赛暨高校网络友谊赛 F.排列计算
- 一个使用 selenium 模块爬取(Twitter、New York Times)网站的可配置爬虫代码
- axios请求拦截器 和 响应拦截器
- MapGuide 和 Google Map
- 这哥们儿的日志让我的心情好得一塌糊涂(ZZ)
- GlobalProtect bupt for mac
- (十一)Unity5新特性----实战2D游戏
热门文章
- 传智播客学习和生活总结
- 地理信息系统导论第八版_清华大学出版社-图书详情-《地理信息系统导论(第3版)》...
- Google出品Mediapipe人像分割,可任意更换图片与视频背景
- 第五节课·基于图像相似度比较分镜头
- 2 基于搜索的路径规划 —— A*算法
- Hsqldb与Spring集成
- 马乐案曾上演“窃听风云”
- css transparent张鑫旭,【灵感杂谈】张鑫旭和他的《CSS世界》
- 多线程join会和和detach分离的区别
- 264 nal type