swift - 如何在 Swift 中将字符转换为 UInt8

标签 swift

我在 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/

相关文章:

ios - 在 Swift 中有条件地导入一个基于 iOS 版本的框架(比如 Speech)?

ios - UIStackView 中的项目未出现

ios - 同时访问0x6040000155d8,但修改需要独占访问

swift - 在 Xcode 8 中将单个文件转换为 Swift 3?

ios - 如何在 Sprite Kit 的 Action 中运行函数?

iOS objectmapper,用数组映射 json

xcode - Xcode 7.3 中的调试 View 层次结构失败

ios - 如何在 UITableView 本身上设置 DropShadow

ios - 使用多个 View Controller 堆栈处理方向

ios - 遇到更改框架大小后重新加载 View 的问题