gpt4 book ai didi

ios - 快速从结构数据中提取字节

转载 作者:行者123 更新时间:2023-11-28 21:14:55 26 4
gpt4 key购买 nike

数据以 struct Data 大小 count == 5 的形式到达,最后 3 个字节包含需要提取的 ID。

以下代码有效,但我相信它可以大大改进(因为你可以告诉我我是 swift 的新手!):

var data:[UInt8] = [ 0xff, 0xff, 0x01, 0x02 ,0x03 ]
var txData = Data(bytes: data)
print(txData.count)
let byte00 = txData.subdata(in: 2..<3 ).withUnsafeBytes { (ptr: UnsafePointer<UInt8>) -> UInt8 in
return ptr.pointee
}
let byte01 = txData.subdata(in: 3..<4 ).withUnsafeBytes { (ptr: UnsafePointer<UInt8>) -> UInt8 in
return ptr.pointee
}
let byte02 = txData.subdata(in: 4..<5 ).withUnsafeBytes { (ptr: UnsafePointer<UInt8>) -> UInt8 in
return ptr.pointee
}

let rxData = (UInt(byte00) << 16) + (UInt(byte01) << 8) + UInt(byte02)
print( String(rxData, radix:16) )

任何涵盖此 swift 领域的教程建议将不胜感激。

最佳答案

你可以这样写:

var data:[UInt8] = [ 0xff, 0xff, 0x01, 0x02 ,0x03 ]
var txData = Data(bytes: data)
print(txData.count)
let byte00 = txData[2]
let byte01 = txData[3]
let byte02 = txData[4]

let rxData = (UInt(byte00) << 16) + (UInt(byte01) << 8) + UInt(byte02)
print( String(rxData, radix:16) ) //->10203

在Swift 3中,Data可以看作是UInt8的Collection,获取每个字节时可以直接下标到DataUInt8

由于 3 字节对于当前的 CPU 来说不是一个好的数字,所以上面的代码不能再短了。

关于ios - 快速从结构数据中提取字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41660569/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com