如何在swift中将wchar_t转换为字符串

我想从C库中获取一个wchar_t数组,并将其转换为swift数据结构,我的代码在这里:

  func getResults(recognizer: UnsafeMutablePointer, stroke: UnsafeMutablePointer, touchState: Int32) -> [String] { var bufLen : Int32 var buf = UnsafeMutablePointer.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* } 

我怎么能将buf转换为swift数据结构? 我知道如果buf是UnsafeMutablePointer.alloc(Int(bufLen)) ,我们可以使用String.fromCString(buf) ! 转换它。

如果我println(buf [0]),它打印一个整数67,这是’C’的ascii值,我怎么println(buf [0])为’C’而不是0? 谢谢!

wchar_tInt32的别名,包含主机字节顺序的UTF-32代码点(在所有当前的iOS和OS X平台上都是little-endian)。

因此,您可以将缓冲区转换为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字符串是零终止的。)

使用:

 var char = Character(UnicodeScalar(Int(buf[idx]))) 

可以将wchar_t解释为Character