In Swift 3, String
hat zwei Initialisierungen
public init(cString: UnsafePointer<CChar>)
public init(cString: UnsafePointer<UInt8>)
daher kann es aus (null-terminierte) Sequenzen von beiden und ohne Vorzeichen Zeichen erstellt werden. Also
let s = String(cString: yourCharPointer)
sollte einfach funktionieren.
String
hat eine andere Initialisierer
public init?(validatingUTF8 cString: UnsafePointer<CChar>)
die auf schlecht gebildet UTF-8-Sequenzen statt sie zu ersetzen durch die Ersatzzeichen ausfällt. Diese Init-Methode hat kein Gegenstück vorzeichenlose Zeichen.
die bestehenden Implementierungen in CString.swift als Beispiele nehmen, ist es nicht allzu schwierig, dies als eine Erweiterung hinzuzufügen:
extension String {
public init?(validatingUTF8 cString: UnsafePointer<UInt8>) {
guard let (s, _) = String.decodeCString(cString, as: UTF8.self,
repairingInvalidCodeUnits: false) else {
return nil
}
self = s
}
}
und dann
if let s = String(validatingUTF8: yourCharPointer) {
print(s)
} else {
print("invalid UTF-8")
}
arbeitet auch mit (nullterminierte) -Sequenzen von sowohl signierten als auch nicht signierten Zeichen.
Verstanden. Es erschien nicht in meiner automatischen Vervollständigung. – AthanasiusOfAlex