如何在Swift中将字符串转换为字节?

51

如何在Swift中将字符串转换为字节?类似于Java中的String.getBytes()


可能是重复的问题:如何将NSString转换为字节 - ahruss
7个回答

129

有一种更优雅的方式。

Swift 3:

let str = "Hello"
let buf = [UInt8](str.utf8)

Swift 4:(感谢@PJ_Finnegan)

let str = "Hello"
let buf: [UInt8] = Array(str.utf8)

我不知道为什么我写了 var buf,其实可以写成 let buf - Albin Stigo
绝对是最好的方式。 - JeremyP
5
显然,在Swift 4中不起作用。使用var buf : [UInt8] = Array(str.utf8)代替。 - PJ_Finnegan

18

您可以遍历UTF8编码点并创建一个数组:

var str = "hello, world"
var byteArray = [Byte]()
for char in str.utf8{
    byteArray += [char]
}
println(byteArray)

2
[(Byte)] 不等同于 'UInt8' - xaxxon
@xaxxon,它在哪方面不是呢? - Joe Daniels
3
@JoeDaniels 我一点头绪也没有。我甚至不确定那是我写的。 - xaxxon

13

编辑/更新: Xcode 11.5 • Swift 5.2

extension StringProtocol {
    var data: Data { .init(utf8) }
    var bytes: [UInt8] { .init(utf8) }
}

"12345678".bytes   // [49, 50, 51, 52, 53, 54, 55, 56]

3

String.withCString是Java中String.getBytes(void)的对应方法。使用方式如下(增加了额外的输入):

let s = "42"
s.withCString {
  ( bytes : (UnsafePointer<CChar>) ) -> Void in
  let k = atoi(bytes)
  println("k is \(k)")
}

2

当你需要传递给C库函数时,另一个选择是:

let str = hexColour.cStringUsingEncoding(NSUTF8StringEncoding)
let x = strtol(str!, nil, 16)

1

1

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