Swift 3方法从String创建utf8编码数据

时间:2016-06-17 20:13:18

标签: string utf-8 swift3

我知道有很多关于NSData东西的Swift3问题。我很好奇如何在Swift3 String和utf8编码(有或没有空终止)之间进入Swift3 Data对象。

到目前为止,我提出的最好的是:

let input = "Hello World"
let terminatedData = Data(bytes: Array(input.nulTerminatedUTF8))
let unterminatedData = Data(bytes: Array(input.utf8))

必须进行中间Array()构造似乎是错误的。

2 个答案:

答案 0 :(得分:58)

很简单:

let input = "Hello World"
let data = input.data(using: .utf8)!

如果您想使用null终止data,只需append一个0即可。或者您可以致电cString(using:)

let cString = input.cString(using: .utf8)! // null-terminated

答案 1 :(得分:2)

应删除NSString框架中的

NSFoundation方法,以支持Swift标准库等效项。可以使用任何Sequence元素UInt8初始化数据。 String.UTF8View满足此要求。

let input = "Hello World"
let data = Data(input.utf8)
// [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100]

String null termination是C语言的一个实现细节,它不应泄漏到外面。如果您计划使用C API,请查看utf8CString类型的String属性:

public var utf8CString: ContiguousArray<CChar> { get }
Data转换为CChar后即可获得

UInt8

let input = "Hello World"
let data = Data(input.utf8CString.map { UInt8($0) })
// [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 0]