在 Swift 中将十六进制字符串转换为 Base64

Joj*_*dmo 2 base64 hex ios swift

有没有办法在 Swift 中将十六进制字符串转换为 base64?例如,我想转换:

BA5E64C0DE
Run Code Online (Sandbox Code Playgroud)

到:

ul5kwN4=
Run Code Online (Sandbox Code Playgroud)

可以使用以下方法将普通字符串转换为 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)
Run Code Online (Sandbox Code Playgroud)

但这会产生以下结果:

QkE1RTY0QzBERQ==
Run Code Online (Sandbox Code Playgroud)

因为它只是将十六进制视为普通的 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"}
//...
Run Code Online (Sandbox Code Playgroud)

如果有这样的东西就好了:

let hex: String = "BA5E64C0DE"

let data: NSData = hex.dataUsingEncoding(NSHexadecimalEncoding)!
let base64Encoded: NSString = data.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))

let base64: String = (base64Encoded as String)
Run Code Online (Sandbox Code Playgroud)

但遗憾的是,没有NSHexadecimalEncoding。有没有有效的方法可以将十六进制字符串转换为 Swift 中的 base64 表示形式?

Rob*_*Rob 6

Base-64 字符串"ul5kwN4="转换为由五个字节、、、和NSData组成的二进制文件。BA5E64C0DE

现在,如果您确实有一个具有十六进制表示形式的字符串,则可以NSData使用如下例程将其转换为二进制:https ://stackoverflow.com/a/26502285/1271826

一旦你有了NSData,你就可以构建你的 64 进制字符串:

let hexString = "BA5E64C0DE"
let binaryData = hexString.dataFromHexadecimalString()
let base64String = binaryData?.base64EncodedStringWithOptions(nil)
Run Code Online (Sandbox Code Playgroud)

这会生成所需的输出ul5kwN4=