我在 swift 中得到了一组字符:
static let charArray: [Character] = [ "S", "t", "r", "i", "n", "g"]
我想对每个 Character
作为一个字节 (UInt8
) 进行一些按位运算。例如,如何将 charArray[0]
转换为 UInt8
?
最佳答案
您需要通过 Character
:s 的 String
表示形式转换为 UInt8
。但是,您不需要在 [Character] -> [UInt8]
转换中显式初始化数组;由于 String.UTF8View
(来自 String.utf8
)是一个 CollectionType
,您可以对 map
操作String.UTF8View
本身;使用 UInt8
初始化。即,
let charArray: [Character] = [ "S", "t", "r", "i", "n", "g"]
let asUInt8Array = String(charArray).utf8.map{ UInt8($0) }
print(asUInt8Array)
/* [83, 116, 114, 105, 110, 103] */
print(asUInt8Array.dynamicType)
/* Array<UInt8> */
关于您在下面的评论(“与 Objective-C 的简单方法相比,对 Swift 的抽象感到沮丧”):如果您认为上面的内容很困惑,您可以包括它在 SequenceType
的扩展中被限制为 Character
元素,允许在实践中更容易使用。例如:
extension SequenceType where Generator.Element == Character {
/* extension accessible as function */
func asByteArray() -> [UInt8] {
return String(self).utf8.map{UInt8($0)}
}
/* or, as @LeoDabus pointed out below (thanks!),
use a computed property for this simple case */
var byteArray : [UInt8] {
return String(self).utf8.map{UInt8($0)}
}
}
使用示例:
let charArray: [Character] = [ "S", "t", "r", "i", "n", "g"]
/* use extension function */
let asUInt8Array = charArray.asByteArray()
/* or computed property */
let asUInt8Array = charArray.byteArray
关于swift - 如何在 Swift 中将字符转换为 UInt8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36024295/