您的位置:首页 > 其它

字节指令的解析

2016-03-25 15:12 281 查看
字节指令的格式

字节

字节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;

}


}

}

}


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: