【发布时间】:2015-04-13 01:56:43
【问题描述】:
有没有办法在 Swift 中将十六进制字符串转换为 base64?例如,我想转换:
BA5E64C0DE
到:
ul5kwN4=
可以使用以下方法将普通字符串转换为 base64:
let hex: String = "BA5E64C0DE"
let utf8str: NSData = hex.dataUsingEncoding(NSUTF8StringEncoding)!
let base64Encoded: NSString = utf8str.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))
let base64: String = (base64Encoded as String)
但这会产生以下结果:
QkE1RTY0QzBERQ==
因为它只是将十六进制视为普通的 UTF-8 字符串,而不是十六进制。
可以通过循环每六个十六进制字符并将其转换为四个相应的 base64 字符来正确地将其转换为 base64,但这将非常低效,而且非常愚蠢(需要 17,830,160 if 语句):
if(hex == "000000"){base64+="AAAA"}
else if(hex == "000001"){base64+="AAAB"}
else if(hex == "000002"){base64+="AAAC"}
else if(hex == "BA5E64"){base64+="ul5k"}
//...
如果有这样的东西就好了:
let hex: String = "BA5E64C0DE"
let data: NSData = hex.dataUsingEncoding(NSHexadecimalEncoding)!
let base64Encoded: NSString = data.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))
let base64: String = (base64Encoded as String)
但遗憾的是,没有NSHexadecimalEncoding。有没有什么有效的方法可以将十六进制字符串转换为 Swift 中的 base64 表示?
【问题讨论】:
-
我以前见过这种投反对票的模式(问题和所有答案的迅速投反对票,但没有一个解释为什么),这很烦人。也许他们认为这与其他讨论都是重复的(尽管我认为它略有不同,即使它涉及到其他地方已经很好地涵盖的问题)。我不知道。不过,我回答你的问题了吗?