如何在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_t
是Int32
的别名,包含主机字节顺序的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