字节指令的解析
2016-03-25 15:12
281 查看
字节指令的格式
各字节定义如下:
字节1:指令首字节始终为 7FH
字节2:指令长度
字节3:指令码
字节4:校验和
字节5:校验码,为前面的第2—3字节的算术和的低8位,即算术和对256取模后的结果;
字节5=(字节2+字节3+字节4)%256
各字节定义如下:
字节1:指令首字节始终为 7FH
字节2:指令长度
字节3:指令码
10字节数组:日期数据
字节7:校验码,为前面的第2—3字节的算术和的低8位,即算术和对256取模后的结果;
字节5=(字节2+字节3+10字节数组)%256
各字节定义如下:
字节1:指令首字节始终为 7FH
字节2:指令长度
字节3:指令码
20字节数组:wifi名字或密码
字节7:校验码,为前面的第2—3字节的算术和的低8位,即算术和对256取模后的结果;
字节5=(字节2+字节3+20字节数组)%256
解析
字节 | 字节1 | 字节2 | 字节3 | 字节4 | 字节5 |
含义 | 7F | 指令长度 | 指令码 | 数据位 | 校验和 |
字节1:指令首字节始终为 7FH
字节2:指令长度
字节3:指令码
字节4:校验和
字节5:校验码,为前面的第2—3字节的算术和的低8位,即算术和对256取模后的结果;
字节5=(字节2+字节3+字节4)%256
字节 | 字节1 | 字节2 | 字节3 | 10字节数组 | 字节7 |
含义 | 7F | 01 | 指令码 | 时间数据 | 校验和 |
字节1:指令首字节始终为 7FH
字节2:指令长度
字节3:指令码
10字节数组:日期数据
字节7:校验码,为前面的第2—3字节的算术和的低8位,即算术和对256取模后的结果;
字节5=(字节2+字节3+10字节数组)%256
字节 | 字节1 | 字节2 | 字节3 | 20字节数组 | 字节7 |
含义 | 7F | 01 | 指令码 | 重命名数据 重设密码 | 校验和 |
字节1:指令首字节始终为 7FH
字节2:指令长度
字节3:指令码
20字节数组:wifi名字或密码
字节7:校验码,为前面的第2—3字节的算术和的低8位,即算术和对256取模后的结果;
字节5=(字节2+字节3+20字节数组)%256
解析
void CClientConnect::ParseByteData(UChar *pBuf, UInt iLen)
{
for(int i = 0;i < iLen;i++)
{
if(0x7F == pBuf[i])
{
if(iLen > 1)
{
m_iDataLen = pBuf[i+1];
}
m_iRemaLen = iLen-i;
if(m_iRemaLen < m_iDataLen || m_iRemaLen == 1)
{
memcpy(m_pCmdControlBuf,&pBuf[i],m_iRemaLen);
m_pCmdControlBuf[m_iRemaLen] = 0;
break;
}
UChar *pData = NULL;
pData = new UChar[m_iDataLen];
memcpy(pData,&pBuf[i],m_iDataLen);
if(CheckCode(pData,m_iDataLen)) //检验校验和
{
ParseCmdData(pData); //解析指令
memset(pData,0,m_iDataLen);
}
if(pData)
{
delete pData;
pData = NULL;
}
i += (m_iDataLen-1);
m_iRemaLen = 0;
m_iDataLen = 0;
continue;
}else //拼接上次接收不完整的指令
{
if(m_iRemaLen == 1)
{
m_iDataLen = pBuf[0];
}
m_pCmdControlBuf[m_iRemaLen] = pBuf[i];
m_iRemaLen++;
if(0x7F == m_pCmdControlBuf[0] && CheckCode(m_pCmdControlBuf,m_iDataLen))
{
UChar *pData = NULL;
pData = new UChar[m_iDataLen];
memcpy(pData,m_pCmdControlBuf,m_iDataLen);
ParseCmdData(pData);
memset(m_pCmdControlBuf,0,PRO_LEN);
if(pData)
{
delete pData;
pData = NULL;
}
}
if(m_iRemaLen == m_iDataLen)
{
memset(m_pCmdControlBuf,0,PRO_LEN);
m_iRemaLen = 0;
m_iDataLen = 0;
}
}
}
}
相关文章推荐
- HIVE和SPARKSQL计算引擎在TEXT导入PARQUET格式的HIVE存储引擎分片数量机制
- php 连接 postgreSql
- ibaits防止sql注入
- 109. Convert Sorted List to Binary Search Tree
- Git超级菜鸟学习 --> 个人常用命令add,commit以及push
- android开源图表库MPAndroidChart
- 经典收藏
- 字符编码详解——彻底理解掌握编码知识,“乱码”不复存在
- 【转载】libcurl的使用总结
- Eclipse在导入项目时出现“No projects found to import”解决办法
- android加载网页带进度条
- arduino 中通过寄存器地址访问寄存器内容
- 将博客搬至CSDN
- 用js查找法实现当前栏目的高亮显示的代码
- android app 集成 支付宝支付 微信支付
- 移动端1px
- ng-model数据绑定实例
- column分列
- eclipse工程报faceted project problem
- 希尔排序