如何将UInt8(从数组中)附加到字符串?

时间:2015-12-22 06:21:14

标签: swift

我需要从UInt8数组中读取并将某些字节追加到String中,但无论我尝试什么,它都会给我错误。 +=不适用于它抱怨的CChar(ptr[i])String.append()无效,预计Character而不是CChar,为什么地狱中的所有内容都可以在Swift中转换为CChar而不是Character?这是我的样本函数

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
}

另外,从String数组的一部分设置UInt8的最佳方法是什么?我试过这个,但它不起作用,var s = String(bytes: &ptr[3], encoding: NSASCIIStringEncoding)。实际上,这个初始化器也缺乏指定从指针获取多少字节的方法。

1 个答案:

答案 0 :(得分:1)

您可以使用Foundation方法NSString(bytes:length:encoding:)将原始字节转换为String。

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
    }
}