如何在Swift中将字符串转换为字节?类似于Java中的String.getBytes()
。
有一种更优雅的方式。
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 Stigovar buf : [UInt8] = Array(str.utf8)
代替。 - PJ_Finnegan您可以遍历UTF8编码点并创建一个数组:
var str = "hello, world"
var byteArray = [Byte]()
for char in str.utf8{
byteArray += [char]
}
println(byteArray)
编辑/更新: 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]
String.withCString是Java中String.getBytes(void)的对应方法。使用方式如下(增加了额外的输入):
let s = "42"
s.withCString {
( bytes : (UnsafePointer<CChar>) ) -> Void in
let k = atoi(bytes)
println("k is \(k)")
}
当你需要传递给C库函数时,另一个选择是:
let str = hexColour.cStringUsingEncoding(NSUTF8StringEncoding)
let x = strtol(str!, nil, 16)
Swift 4.1.
这取决于你想要实现什么。对于同一个问题,我使用了...
let message = "Happy"
for v in message.utf8 {
print(v)
}
//72
//97
//112
//112
//121
https://developer.apple.com/documentation/swift/string.utf8view
string.utf8
或string.utf16
应该能够实现你所要求的功能。更多信息请见这里: https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/StringsAndCharacters.html。