Foxtable(狐表)用户栏目专家坐堂 → crc16验证


  共有1828人关注过本帖平板打印复制链接

主题:crc16验证

帅哥哟,离线,有人找我吗?
fubblyc
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2355 积分:16187 威望:0 精华:0 注册:2013/9/1 8:09:00
crc16验证  发帖心情 Post By:2017/10/7 16:52:00 [只看该作者]

各位老师好,有一个关于 crc16验证的问题:

手机通过ble蓝牙连接扫码枪后,得到数据后,要通过如下的crc16 js 进行验证。


ble通信文档

传输命令格式:

OP (1 BYTE)

Len(1 BYTE)

CRC16(2 BYTE)

Data(0~250BYTE)

 

1OP定义如下:

NORMAL_PACKET         0X37

END_PACKET             0X38

一个长条码可能会分成多帧进行传输,一次最多传输250个字节的条码内容。

如果发送的不是最后一个包,OP填入NORMAL_PACKET

如果发送的是最后一个包,OP填入END_PACKET

 

2Len定义如下:

是指Data域里面的数据长度,不包括CRC16的长度。

 

3CRC16

Data域里面所有数据的校验和。校验方式为自定义校验方式,不是标准的CRC16.

 

4Data定义如下:

Data为扫码枪扫到的数据,如果条码过长会分多个报文进行传输。



js代码:

function crcCheck(msg, len) {

    var crc = Number(0);

    var current = Number(0);

    for (var i = 0; i < len; i++) {

        current = (msg[i] & 0x000000FF) << 8;

        for (var j = 0; j < 8; j++) {

            if ((crc ^ current) & 0x8000) {

                crc = (crc << 1) ^ 0x1021;

            }  

            else { 

                crc <<= 1;

            }

            crc &= 0x0000FFFF;

            current <<= 1;

        }

    }

    return crc;

};


问题在这里,扫入的条码怎么变成这个 buffer的格式呢。。。


var buf = new Buffer([0xEA, 0xAE, 0x01, 0x02,0x59,0xAE]);   //填BLE的条码数据(扫码枪扫入的条码)+秘钥(我这边已设置的8位数)  总长度14+8 =22

var crc16 = crcCheck(buf, buf.length);

console.log("crc16[%j]=%j",buf.length,crc16.toString(16) );

[此贴子已经被作者于2017/10/7 16:51:53编辑过]

 回到顶部
总数 15 1 2 下一页