Swift 3: converting UnsafePointer with null termination of <UInt8> to string
I have a c api that returns a null-terminated string that is an array of type unsigned char*(which matches UnsafePointer<UInt8>).
Swift has an initializer String(validatingUTF8:), but the argument must be UnsafePointer<CChar>(aka UnsafePointer<Int8>), and there is no trivial way to convert between them.
How do I convert from this zero-terminated c-string to a Swift string?
+3
1 answer
Swift 3 Stringhas two initializers
public init(cString: UnsafePointer<CChar>)
public init(cString: UnsafePointer<UInt8>)
( ) , . ,
let s = String(cString: yourCharPointer)
.
String
public init?(validatingUTF8 cString: UnsafePointer<CChar>)
UTF-8 . .
CString.swift , :
extension String {
public init?(validatingUTF8 cString: UnsafePointer<UInt8>) {
guard let (s, _) = String.decodeCString(cString, as: UTF8.self,
repairingInvalidCodeUnits: false) else {
return nil
}
self = s
}
}
if let s = String(validatingUTF8: yourCharPointer) {
print(s)
} else {
print("invalid UTF-8")
}
( ) , .
+9