2015-12-22 67 views
0

我需要從UInt8數組讀取並將某些字節附加到String,但無論我嘗試什麼,它都會給出錯誤。 +=不適用於CChar(ptr[i])它抱怨。 String.append()不起作用它期望Character而不是CChar,以及爲什麼在地獄裏一切都可以在Swift中轉換,但不是CCharCharacter?這裏是我的樣品FUNC如何將UInt8(從數組)附加到字符串?

func FromBuf(ptr: UnsafeMutablePointer<UInt8>, length len: Int) -> String { 
    var i: Int = 0 
    while (i < len) { 
    if (i > 0) { s.append(CChar(ptr[i])) } 
    i++ 
    } 
    return s 
} 

而且,這將是設置StringUInt8陣列的一部分的最佳方式?我試過這個,但它不起作用,var s = String(bytes: &ptr[3], encoding: NSASCIIStringEncoding)。實際上,這個初始化程序也沒有辦法指定從指針中得到多少字節。

回答

1

您可以使用Foundation方法NSString(bytes:length:encoding:)將原始字節轉換爲字符串。

import Foundation 

func FromBuf(ptr: UnsafeMutablePointer<UInt8>, length len: Int) -> String? { 
    // convert the bytes using the UTF8 encoding 
    if let theString = NSString(bytes: ptr, length: len, encoding: NSUTF8StringEncoding) { 
     return theString as String 
    } else { 
     return nil // the bytes aren't valid UTF8 
    } 
} 

如果你只是想使用的字節數組的一部分,那麼你也可以提供起始偏移的功能作爲附加參數。

import Foundation 

func FromBuf(ptr: UnsafeMutablePointer<UInt8>, startingOffset: Int, length len: Int) -> String? { 
    // convert the bytes using the UTF8 encoding 
    if let theString = NSString(bytes: ptr + startingOffset, length: len, encoding: NSUTF8StringEncoding) { 
     return theString as String 
    } else { 
     return nil // the bytes aren't valid UTF8 
    } 
} 
+0

Thanks @Marc,這甚至救了我從追加一個字符一次 –