【问题标题】:Reading values out of a byte array in Swift 3在 Swift 3 中从字节数组中读取值
【发布时间】:2017-09-03 09:33:10
【问题描述】:

我对 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) 后跟浮点数 (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'

任何帮助表示赞赏。

【问题讨论】:

    标签: ios arrays iphone swift xcode


    【解决方案1】:

    .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 支持的平台都是小字节序)。这可能不是一个很好的可移植性假设。

    【讨论】:

      猜你喜欢
      • 2017-07-06
      • 2018-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      • 1970-01-01
      相关资源
      最近更新 更多