无忧启动论坛

 找回密码
 注册
搜索
最纯净的「微PE装机优盘」UEPON大师作品系统gho:最纯净好用系统下载站数据恢复、数据保护、视频编辑
Win To Go 极致利器(IXUNCIS固态U盘)虚位以待广告联系 QQ:184822951 微信:wuyouceo
查看: 1902|回复: 4

swift 酷狗音乐 krc 歌词文件解码

[复制链接]
发表于 2016-6-14 08:07:37 | 显示全部楼层 |阅读模式
参考网上其他网友的oc代码,改成swift代码


  1.    func decode(krcFilePath: String) -> String {
  2.         // 异或字符  "@Gaw^2tGQ61-Îòni"
  3.         let EncKey:[Bytef] = [64,71,97,119,94,50,116,71,81,54,49,45,206,210,110,105]
  4.         let totalBytes = NSData(contentsOfFile: krcFilePath)!
  5.         let EncodedBytes = NSData(data: totalBytes.subdataWithRange(NSMakeRange(4,totalBytes.length - 4)))
  6.         let ZipBytes = NSMutableData(capacity: EncodedBytes.length)!
  7.         let encodeBytes = UnsafePointer<Bytef>(EncodedBytes.bytes)
  8.         for i in 0..<EncodedBytes.length {
  9.             var b = encodeBytes[i] ^ EncKey[i % 16]
  10.             ZipBytes.appendBytes(&b, length: 1)
  11.         }
  12.         
  13.         let originalData = try! ZipBytes.gunzippedData()
  14.         let s = String(data: originalData, encoding: NSUTF8StringEncoding)!
  15.         let txtFilePath = krcFilePath.substringToIndex(fileName.endIndex.advancedBy(-3)) + "txt"
  16.         try! s.writeToFile(txtFilePath, atomically: true, encoding: NSUTF8StringEncoding)
  17.         
  18.         return s
  19.     }
复制代码


解压使用 网上下载的 NSData+GZIP.swift
 楼主| 发表于 2016-6-14 08:16:59 | 显示全部楼层
或用

  1.    func decode(krcFilePath: String) -> String {
  2.         let EncKey = "@Gaw^2tGQ61-Îòni" as NSString
  3.         let totalBytes = NSData(contentsOfFile: krcFilePath)!
  4.         let EncodedBytes = NSData(data: totalBytes.subdataWithRange(NSMakeRange(4,totalBytes.length - 4)))
  5.         let ZipBytes = NSMutableData(capacity: EncodedBytes.length)!
  6.         let encodeBytes = UnsafePointer<Bytef>(EncodedBytes.bytes)
  7.         for i in 0..<EncodedBytes.length {
  8.             let c = EncKey.characterAtIndex(i % 16)
  9.             var b = encodeBytes[i] ^ Bytef(c)
  10.             ZipBytes.appendBytes(&b, length: 1)
  11.         }
  12.         
  13.         let originalData = try! ZipBytes.gunzippedData()
  14.         let s = String(data: originalData, encoding: NSUTF8StringEncoding)!
  15.         let txtFilePath = krcFilePath.substringToIndex(fileName.endIndex.advancedBy(-3)) + "txt"
  16.         try! s.writeToFile(txtFilePath, atomically: true, encoding: NSUTF8StringEncoding)
  17.         
  18.         return s
  19.     }
复制代码
回复

使用道具 举报

 楼主| 发表于 2016-6-14 10:00:25 | 显示全部楼层
目前最简单写法

  1.     // 将krc文件解码并写入txt文件
  2.     func decode(krcFilePath: String) -> String {
  3.         // let EncKey = "@Gaw^2tGQ61-Îòni"
  4.         let EncKey:[Bytef] = [64,71,97,119,94,50,116,71,81,54,49,45,206,210,110,105]
  5.         let totalBytes = NSData(contentsOfFile: krcFilePath)!
  6.         let EncodedBytes = NSMutableData(data: totalBytes.subdataWithRange(NSMakeRange(4,totalBytes.length - 4)))
  7.         let encodeBytes = UnsafeMutablePointer<Bytef>(EncodedBytes.bytes)
  8.         for i in 0..<EncodedBytes.length {
  9.             encodeBytes[i] ^= EncKey[i % 16]
  10.         }
  11.         let originalData = try! EncodedBytes.gunzippedData()
  12.         let s = String(data: originalData, encoding: NSUTF8StringEncoding)!
  13.         
  14.         let txtFilePath = krcFilePath.substringToIndex(fileName.endIndex.advancedBy(-3)) + "txt"
  15.         try! s.writeToFile(txtFilePath, atomically: true, encoding: NSUTF8StringEncoding)
  16.         
  17.         return s
  18.     }
复制代码
回复

使用道具 举报

 楼主| 发表于 2016-6-14 17:17:26 | 显示全部楼层
let EncKey:[Bytef] = [64,71,97,119,94,50,116,71,81,54,49,45,206,210,110,105]  这一行可以用以下代替
        
  1.         let key = "@Gaw^2tGQ61-Îòni"
  2.         var EncKey = [Bytef]()
  3.         for c in key.utf16 {
  4.             EncKey.append(Bytef(c))
  5.         }
复制代码
回复

使用道具 举报

发表于 2016-9-27 10:24:49 | 显示全部楼层
牛啊,想不到的强帖












zhongyuan888.com
dedeai9.info
iphone4567.com
gegelu.net
bloomingdalechurch.com
hcdjdxzs.com
luyiludy.com
jiujiuse9.com
chucaodaohang.com
duomeiti8.org
szcfpcb.com
sddcLvtiao.com
sckxz.org
jinanseo.org
gx30mpa.org
szfxst.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2020-9-24 05:35

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表