将Swift CChar数组转换为字符串

将Swift CChar数组转换为字符串,c,string,swift,C,String,Swift,一些C API,例如glGetShaderInfoLog,在缓冲区中返回字符数组。我需要将它们转换为字符串来使用它们 var value: GLint = 0 glGetShaderiv(shader, GLenum(GL_INFO_LOG_LENGTH), &value) var infoLog: GLchar[] = GLchar[](count: Int(value), repeatedValue: 0) var infoLogLength: GLsizei = 0 glGetSh

一些C API,例如glGetShaderInfoLog,在缓冲区中返回字符数组。我需要将它们转换为字符串来使用它们

var value: GLint = 0
glGetShaderiv(shader, GLenum(GL_INFO_LOG_LENGTH), &value)
var infoLog: GLchar[] = GLchar[](count: Int(value), repeatedValue: 0)
var infoLogLength: GLsizei = 0
glGetShaderInfoLog(shader, value, &infoLogLength, &infoLog)
var s: String = NSString.stringWithUTF8String(infoLog) // Compile Error: Cannot convert the expression's type 'NSString!' to type 'CString'
在本例中,GLchar映射到Swift类型CChar AKA Int8,但就我的一生而言,我找不到一个字符串或NSString方法可以用它初始化。

这样做的技巧是:

var s = NSString(bytes: infoLog, length: Int(infoLogLength), encoding: NSASCIIStringEncoding)

或者,这里还有另一个编译选项:

var infoLog = UnsafePointer<CChar>.alloc(Int(value))
glGetShaderInfoLog(shader, value, nil, infoLog)
var infoLogString = String.fromCString(infoLog)
infoLog.dealloc(Int(value))
var infoLog=UnsafePointer.alloc(Int(value))
glGetShaderInfoLog(着色器、值、nil、信息日志)
var infoLogString=String.fromCString(infoLog)
infoLog.dealloc(Int(value))

如果您键入hint将其改为NSString怎么办?