iOS:在swift中将UnsafeMutablePointer <Int8>转换为String?

use*_*662 12 ios swift

正如标题所说,在swift中将UnsafeMutablePointer转换为String的正确方法是什么?

//lets say x = UnsafeMutablePointer<Int8> 

var str = x.memory.????
Run Code Online (Sandbox Code Playgroud)

我尝试使用x.memory.description显然它是错误的,给我一个错误的字符串值.

rob*_*off 34

如果指针指向以NUL结尾的UTF-8字节的C字符串,则可以执行以下操作:

import Foundation

let x: UnsafeMutablePointer<Int8> = ...
// or UnsafePointer<Int8>
// or UnsafePointer<UInt8>
// or UnsafeMutablePointer<UInt8>

let str = String(cString: x)
Run Code Online (Sandbox Code Playgroud)

  • let str = String.fromCString(x) (3认同)

Lim*_*Red 8

时代变了.在Swift 3+中你会这样做:

如果你想要验证utf-8:

let str: String? = String(validatingUTF8: c_str)
Run Code Online (Sandbox Code Playgroud)

如果要将utf-8错误转换为unicode错误符号:

let str: String = String(cString: c_str)
Run Code Online (Sandbox Code Playgroud)

假设c_str类型UnsafePointer<UInt8>或类型UnsafePointer<CChar>相同,大多数C函数返回.