我想从foo
库中获取wchar_t
数组,并将其转换为swift数据结构,我的代码在这里:
C
如何将buf转换为swift数据结构?
我知道如果buf是 func getResults(recognizer: UnsafeMutablePointer<Void>, stroke: UnsafeMutablePointer<Int32>, touchState: Int32) -> [String] {
var bufLen : Int32
var buf = UnsafeMutablePointer<wchar_t>.alloc(Int(bufLen))
getRecognition(recognizer, stroke, touchState, buf, bufLen)
var results = String.fromCString(buf)! //this line has an error, cause the buf is wchar_t*, not char*
}
,我们可以使用UnsafeMutablePointer<Int8>.alloc(Int(bufLen))
!转换它。
如果我println(buf [0]),它打印一个整数67,这是'C'的ascii值,我怎么println(buf [0])为'C'而不是0? 谢谢!
答案 0 :(得分:2)
wchar_t
是Int32
的别名,包含UTF-32代码点
以主机字节顺序(在当前所有iOS和OS X上都是小端)
平台)。
因此,您可以将缓冲区转换为Swift字符串,如下所示:
if let str = NSString(bytes: UnsafePointer(buf),
length: wcslen(buf) * sizeof(wchar_t),
encoding: NSUTF32LittleEndianStringEncoding) as? String {
println(str)
} else {
// encoding problem ...
}
(这假定来自C库函数的wchar_t
字符串
是零终止。)
答案 1 :(得分:0)
使用:
var char = Character(UnicodeScalar(Int(buf[idx])))
可以将wchar_t解释为Character