Swift Data类型数据的处理

引言

在重构公司项目的过程中发现 swift 开发自定义协议往往需要使用NSData转换后才能使用,考虑到重构的目标是尽量不使用oc的数据类型特别研究了一下。

构造数据包

在这里我们使用Swift的指针类型进行数据包的转换具体代码如下:

func getPacket(pointer:UnsafeRawPointer,data:Data!,size:Int) -> Data? {
       //根据结构体构造Data数据
       var ahpack:Data = Data(bytes: pointer, count:size)
       //添加附加数据
        if data != nil{
            ahpack.append(data!)
        }
       return ahpack
    }
    //自定义协议包头
    struct Prototype {
     let   param1:UInt16
     let   param2:UInt16
     let   param3:UInt16
     let   param4:UInt16
    }

//调用
//构造包结构体    
var packetStruct =  Prototype(param1: 1,param2: 2,param3: 3,param4: 4)
//生成协议包
print(getPacket(pointer: &packetStruct, data: nil, size:   MemoryLayout.size(ofValue: packetStruct)))
   

解析数据包

//从data转换结构体指针
  func getStruct(pointer:UnsafePointer<UInt8>)->UnsafePointer<Prototype>.Pointee{
   
        unsafeBitCast(pointer, to: UnsafePointer<Prototype>.self).pointee
    }


//使用
   let structs = getStruct(pointer: &data)
   print("param1:\(structs.param1)\nparam2:\(structs.param2)\nparam3:\(structs.param3)\nparam4:\(structs.param4)")

效果如图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值