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