将Swift CChar数组转换为String

时间:2014-06-05 01:49:08

标签: c string swift

某些C API,例如glGetShaderInfoLog,返回缓冲区中的字符数组。我需要将它们转换为Strings才能使用它们。

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但是在我的生命中,我无法找到一个将用它初始化的String或NSString方法。

2 个答案:

答案 0 :(得分:9)

这就是诀窍:

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

答案 1 :(得分:2)

另外,这是另一个编译的选项:

var infoLog = UnsafePointer<CChar>.alloc(Int(value))
glGetShaderInfoLog(shader, value, nil, infoLog)
var infoLogString = String.fromCString(infoLog)
infoLog.dealloc(Int(value))