【问题标题】:Convert Swift CChar array into a String将 Swift CChar 数组转换为字符串
【发布时间】:2014-06-05 01:49:07
【问题描述】:

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

【问题讨论】:

  • 如果你把它输入到 NSString 会怎么样?

标签: c string swift


【解决方案1】:

这就是诀窍:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-13
      • 1970-01-01
      • 2016-11-20
      • 2015-10-11
      • 1970-01-01
      • 2016-06-07
      相关资源
      最近更新 更多