使用最少开销将缓冲区数据转换为UInt8

时间:2016-02-17 02:02:44

标签: ios swift swift2 buffer

我有一个缓冲区正在发送十六进制的数据字符串(例如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)
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

看看这个'自我解释'段

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]

data是一个仅包含从流接收的UInt8值的数组。最有可能ArraySlice / let data = buffer.prefixUpTo(len) /可能适合您。如果你真的需要[Int]作为结果

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