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

时间:2015-06-25 07:13:26

标签: c swift

我想从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? 谢谢!

2 个答案:

答案 0 :(得分:2)

wchar_tInt32的别名,包含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