|
本帖最后由 angelus 于 2017-9-12 17:58 编辑
首先定义一个 私有 的QByteArray 存储每次读到的数据。
然后定义一个 私有 的QByteArray 存储你的头部内容,有些头部是两个 16 进制数据,比如 0A 05这样的。
第一步先把读到的数据缓存,然后根据头部大小,left几位,比较下头部,如果相等,就进行下一步,如果不相等就抛弃所有数据,不用担心头几次的数据错误,等几次交互后,就会正常,基本不会再出现错位丢包。
第二步是计算每一帧的大小,根据协议去计算,然后存储,一般都在第二位存储帧的大小
如果缓存的数据大于2位,就取出第二位的帧大小进行存储。
第三步是判断 缓存是否满足帧大小,如果不满足,就继续缓冲等待,满足就从缓存中取出帧,然后处理校验和
如果校验和OK,就继续处理,如果不OK,就丢弃帧。
note: 这个过程建议写成一个函数,因为可以会进行递归调用,缓存中可能会一次 存好几个帧,递归调用会进行依次处理!QByteArray存储的值意义很明显,Byte 形式的数组,一个byte是8位,换句话说就是8位的二进制,,
一个byte转化为16进制最大为0xFF ,10进制最大值是255 , 计算机中都是数字的,你看到的文字,只是数字根据规则翻译过去的。
一串的byte其实就是 一串的 数字,根据ascii码,就可以翻译成 文字了。
需要注意的是,在传输中 经常会有两位 byte 组成一个数值,很明显 一个8位 不足以表达超过 255的值 ,这时候就需要注意看协议中的大小端了! 也就是高位8个二进制 和 低位8个二进制怎么组合。
比如 0x01 和 0x02 谁在前谁在后,数值是截然不同的, 一般组合都是 0x01是高位 0x02是低位!
|
|