Swift:如何将字符串转换为UInt8数组?

47

如何将字符串转换为UInt8数组?

var str = "test"
var ar : [UInt8]
ar = str
4个回答

78

根据您对非ASCII字符的处理方式不同,有许多不同的方法。

但最简单的代码是使用 utf8 视图:


let string = "hello"

let array: [UInt8] = Array(string.utf8)

请注意,这将导致多字节字符在数组中表示为多个条目,例如:

let string = "é"
print(Array(string.utf8))

打印出[195, 169]

还有一个.nulTerminatedUTF8,它也可以做同样的事情,但是如果你计划将其作为C字符串传递到某个地方,则会在末尾添加一个空字符(但如果您这样做,您可能还可以使用.withCString或者使用桥接C函数的隐式转换。


13
let str = "test"
let byteArray = [UInt8](str.utf8)

4

swift 4

 func stringToUInt8Array(){

     let str:String = "Swift 4"
     let strToUInt8:[UInt8] = [UInt8](str.utf8)

     print(strToUInt8)
 }

0

我来到这个问题,寻找如何将其转换为Int8数组。这是我的做法,但肯定有一种更简单的方法:

String扩展的方法

public func int8Array() -> [Int8] {
    var retVal : [Int8] = []
    for thing in self.utf16 {
        retVal.append(Int8(thing))
    }
    return retVal
}

注意:将UTF-16编码的字符(2个字节)存储在Int8(1个字节)中会导致信息丢失。

2
你不应该使用Int16来处理utf16吗? - marosoaie
@marosoaie 那也不错。这取决于你想要得到什么。令人惊讶的是,INT8_MAX 只有 127,这是我以前听说过和使用过的数字,所以这非常可怕。如果我有选择,我可能会选择 Int 并让 iOS 解决它。 - Dan Rosenstark
3
问题在于int8只有1个字节大小,而utf16字符则需要2个字节。将一个utf16字符存储在int8中会导致信息丢失和数据损坏。 - marosoaie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接