Ios 以最小的开销将缓冲区数据转换为UInt8

Ios 以最小的开销将缓冲区数据转换为UInt8,ios,swift,swift2,buffer,Ios,Swift,Swift2,Buffer,我有一个发送十六进制数据字符串的缓冲区(例如09 02 03 0C 33 35 39)。目前,我正在使用以下代码将此数据保存为字符串,然后再转换为整数数组。我觉得这真的很浪费,我应该将数据拆分到UInt8数组中。根据我的需要,有人能指出一种更有效的读取缓冲区的方法吗 var buffer = [UInt8](count: 4096, repeatedValue: 0) if ( aStream == inputStream){ while (inputStream.hasBytesAva

我有一个发送十六进制数据字符串的缓冲区(例如
09 02 03 0C 33 35 39
)。目前,我正在使用以下代码将此数据保存为字符串,然后再转换为整数数组。我觉得这真的很浪费,我应该将数据拆分到UInt8数组中。根据我的需要,有人能指出一种更有效的读取缓冲区的方法吗

var buffer = [UInt8](count: 4096, repeatedValue: 0)
if ( aStream == inputStream){
    while (inputStream.hasBytesAvailable){
        let len = inputStream.read(&buffer, maxLength: buffer.count)
        if(len > 0){
            if let output: NSString = NSString(bytes: &buffer, length: buffer.count, encoding: NSUTF8StringEncoding) {
                    delegate.readData(output)
            }
        }
    }
}

看看这个“不言自明”的片段

var buffer = [UInt8](count: 10, repeatedValue: 0) // [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
let len = 2 // i have 2 valid values in my buffer
let data = Array(buffer.prefixUpTo(len)) // [0, 0]
数据是一个仅包含从流接收的UInt8值的数组。很可能ArraySlice/
let data=buffer.prefixUpTo(len)
/适合您。如果您确实需要[Int]作为结果

let data = data.prefixUpTo(len).map(Int.init)

感谢您的回复,但我不知道这是如何从缓冲区/输入流引入信息的。看起来这只是在创建空值数组。@我可能不理解您的问题。您是否需要以[Uint8]vis-a-vis-to-NSString格式输出,您不需要吗?或者您的问题是否与“两字节对”09到UInt8值9的转换有关???