iOS 一个在UDP/TCP通信时,对16进制、10进制、NSData等数据之间的转换发送等处理的工具类库,一行代码将16进制字符串轻松转换成UDP需要的指令数据

本文介绍了iOS开发中用于UDP/TCP通信的工具类库LSUDPDataDetail,用于16进制、10进制、NSData等数据转换和指令发送。通过实例解释了ZigBee数据格式,并提供了类库的集成和使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简 书:http://www.jianshu.com/p/e9f8af1ab76f

导读

前段时间在做智能家居项目(ZigBee),使用UDP通信协议控制智能家居,比如说调节LED灯的亮度。在通信部分我使用了CocoaAsyncSocket这个非常主流的开源库,发送和接受传感器发来的数据是很容易的,我将它封装了一下,一句代码就能实现了,所以下面分享的是如何做接下来的工作:1.解读UDP协议指令,2.将16进制字符串抓换成我们需要的指令数据,3.解析发来的数据。

概览

LSUDPDataDetail:一个在UDP或TCP通信时,对16进制、10进制、NSData等数据之间的转换发送等进行处理的工具类库 一般我们在发送指令到传感器时,指令发送成功了传感器不一定会响应,这个类库对这个问题做了一个封装,能够正确的发送传感器需要的指令。里面还有些各个进制直接的转换方法,大家可以直接使用。

一、UDP协议指令(ZigBee数据格式)解读

1.1这是需要我们发送或者接收指令格式:

指令格式
指令格式
右图是LSUDPDataDetail类库中的Demo示例里面的对照(版本更新可能会有变动)
Snip20161104_2.png

1.2示例介绍:

如果看完上面的对照图片还是一脸懵逼,那我们来一起举个栗子聊聊吧~

LED灯数据指令格式

比如说上面是控制LED灯的数据格式:

  1. & * 分别是帧头和帧尾;

  2. TRC是命令头,这个可以区分是什么传感器,比如LED是TLL,可燃气体是TRC;

  3. 00000001yy是地址,这里需要注意的是控制传感器不能直接使用“00000001yy”这个地址,每个传感器下面都有一个底座,也就是节点,每个节点都有自己的地址,在UDP连接成功后节点会发送一条数据,数据里面包含了节点地址,拿到那个节点地址是我们通信的前提,具体可参考:LSUDPDataDetail类库中的ViewController.m Demo文件

  4. xxzzzxxxxxxxxxxx是我们要发送的控制指令数据,传感器也是根据这条数据来做出相应的动作。而需注意的是最后一个数据是CRC验证,如果有需要您需要计算出CRC!(之所以说如果有需要是因为我在CRC位随意输入一个数据是可以和传感器正常工作的,灯也会亮。。。)

* 重要提示!:*

折腾半天可能传感器还没反应,那么有可能是这里错了~ 上面的一串“&TRC00000001yyxxzzzxxxxxxxxxxx*” 全都是缩写/字符格式,包括“0”和“1”!你需要统一将他们转换成HexString或者DecString或者其他进制字符串。 Demo里面实际操作的过程中用到了混拼,也就是一串指令中间是10进制字符串,两头是16进制字符串,当然外面进行了些包装,这样也是可以的,因为无论是16进制还是10进

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值