NSDataに関しては、Swift3以前の質問がたくさんあります。 Swift3 String
からSwift3 Data
オブジェクトにエンコードされたutf8(null終端付きまたはなし)に移動する方法に興味があります。
これまでに思いついた最高のものは:
_let input = "Hello World"
let terminatedData = Data(bytes: Array(input.nulTerminatedUTF8))
let unterminatedData = Data(bytes: Array(input.utf8))
_
中間のArray()
構築を行わなければならないのは間違っているようです。
それは簡単です:
_let input = "Hello World"
let data = input.data(using: .utf8)!
_
data
をnullで終了する場合は、単にappend
に0を指定します。または、cString(using:)
を呼び出すことができます
_let cString = input.cString(using: .utf8)! // null-terminated
_
NSString
フレームワークからのNSFoundation
メソッドは、Swift標準ライブラリに相当します。データは、UInt8
であるSequence
で初期化できます。String.UTF8View
。この要件を満たします。
let input = "Hello World"
let data = Data(input.utf8)
// [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100]
文字列のヌル終端は、C言語の実装の詳細であり、外部に漏れるべきではありません。 C APIを使用する予定の場合は、String
型のutf8CString
プロパティをご覧ください。
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]