如何将UInt8转换为可以连接到字符串的数据类型?

时间:2015-12-26 22:35:57

标签: swift encoding type-conversion

我已经加密了一个在UInt8中输出的字符串

[107, 200, 119, 211, 247, 171, 132, 179, 181, 133, 54, 146, 206, 234, 69, 197]

如何将其转换为可以连接成URL的数据类型,然后可以使用PHP解密?我试图将其转换为base64或十六进制,但我找不到任何有关如何操作的信息。

2 个答案:

答案 0 :(得分:0)

let bytes: [UInt8] = [107, 200, 119, 211, 247, 171, 132, 179, 181, 133, 54, 146, 206, 234, 69, 197]
let base64String = bytes.withUnsafeBufferPointer { buffer -> String in
    let data = NSData(bytes: buffer.baseAddress, length: buffer.count)
    return data.base64EncodedStringWithOptions([])
}
print(base64String)

输出:

a8h30/erhLO1hTaSzupFxQ==

答案 1 :(得分:0)

数据无法直接转换为字符串,因为许多数据字节不能表示为字符串字符。显而易见的选择是编码为Base64或十六进制。 Apple不提供和转换为十六进制,因此最佳选择似乎是Base64。

let bytes: [UInt8] = [107, 200, 119, 211, 247, 171, 132, 179, 181, 133, 54, 146, 206, 234, 69, 197]

// Convert to NSData
let data = NSData(bytes: bytes, length: bytes.count)

// Convert to Base64
let base64String = data.base64EncodedStringWithOptions([])

print("base64String: \(base64String)")

输出:

  

base64String:a8h30 / erhLO1hTaSzupFxQ ==

在大多数情况下,Base64需要进行URL编码,因为可能包含'/'和/或'='字符,具体取决于URL字符串的部分。有关网址编码信息,请参阅此SO answer