2014-06-05 11 views
5

Einige C-APIs, z.B. glGetShaderInfoLog, gibt Zeichenarrays in Puffern zurück. Ich muss sie in Strings konvertieren, um sie zu verwenden.Konvertieren Swift CChar Array in einen String

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' 

In diesem Beispiel GLchar Karten auf den Swift Typen CChar AKA Int8 aber für das Leben von mir kann ich nicht einen String oder NSString Methode finden, die mit ihm initialisieren werden.

+0

was ist, wenn Sie es zu NSString anstelle typehint? – zneak

+0

Derselbe Kompilierungsfehler. – darrinm

Antwort

9

Dies funktioniert der Trick:

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

Alternativ hier eine weitere Option, die kompiliert:

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