我是 Swift 的新手,我在从 SwiftSocket 接收的字节数组中读取一些信息时遇到了一些问题
XCode 说:“数据 [字节]?13 个值”
[68, 65, 84, 65, 44, 55, 0, 0, 0, 146, 192, 236, 66]
响应应该是这样的 "DATA"(68, 65, 84, 65, 44) 然后是一个整数 55 (55, 0, 0, 0),然后是一个 float (146, 192, 236, 66)
如何在 Swift3 中从数组中读取这些值?
let (data, _, _) = client.recv(13)
dump(data)
var subAr = data?[9...12]
dump(subAr)
这显示了数组,但我似乎无法读取值。
let float2 = subAr.withUnsafeBytes { $0.pointee } as Float
给我以下错误:'ArraySlice' 类型的值?没有成员 'withUnsafeBytes'
感谢任何帮助。
最佳答案
.withUnsafeBytes { $0.pointee } as SomeType
是一个适用于 Data
的习语。
试试这个:
//sample data...
var data: [UInt8]? = [68, 65, 84, 65, 44, 55, 0, 0, 0, 146, 192, 236, 66]
let int32Data = Data(data![5..<9])
let int32Value: Int32 = int32Data.withUnsafeBytes{$0.pointee}
print(int32Value) //->55
let floatData = Data(data![9..<13])
let floatValue: Float = floatData.withUnsafeBytes{$0.pointee}
print(floatValue) //->118.37
假设数据包含本地字节序的多字节值(目前所有支持 Swift 的平台都是小字节序)。对于可移植性,这可能不是一个好的假设。
关于ios - 从 Swift 3 中的字节数组中读取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46022049/