HJ/T 212-2005: hj212_2005.pdf (过期)
HJ/T 212-2017: hj212_2017.pdf (有效)
离线
过年还在公司整这个, 都找不到几个前辈讨论这个问题, 发国标文件就当抛砖引玉吧.
离线
@jiangming1399 太感谢大神了, ^_^
离线
#include <string.h>
#include <stdio.h>
char a[] = "QN=20160801085857223;ST=32;CN=1062;PW=100000;MN=010000A8900016F000169DC0;Flag=5;CP=&&RtdInterval=30&&";
unsigned int CRC16_Checkout ( unsigned char *puchMsg, unsigned int usDataLen )
{
unsigned int i,j,crc_reg,check;
crc_reg = 0xFFFF;
for(i=0;i<usDataLen;i++)
{
crc_reg = (crc_reg>>8) ^ puchMsg[i];
for(j=0;j<8;j++)
{
check = crc_reg & 0x0001;
crc_reg >>= 1;
if(check==0x0001)
{
crc_reg ^= 0xA001;
}
}
}
return crc_reg;
}
int main()
{
printf("strlen=%d, crc16=%x\n", strlen(a), CRC16_Checkout(a,strlen(a)));
return 0;
}
输出结果:
strlen=101, crc16=1c80
和文件的示例对上了:
示例:
##0101QN=20160801085857223;ST=32;CN=1062;PW=100000;MN=010000A8900016F000169DC0;Flag=5;CP=&&RtdInterval=30&&1C80\r\n,其中 1C08 为 CRC16 校验码,是对数据段 QN=20160801085857223;ST=32;CN=1062;PW=100000;MN=010000A8900016F000169DC0;Flag=5;CP=&&RtdInterval=30&& 进 行CRC16 校验所得的校验码。
离线
网上有人说 HJ212协议制订的有缺陷,比如请求编码QN
精确到毫秒的时间戳:QN=YYYYMMDDhhmmsszzz,用来唯一标识一次命令交互
问题在于如果一毫秒内提交多个命令怎么办
感觉按RTSP那样引入CSeq递增,更加简单可靠
离线