Skip to content

Latest commit

 

History

History
161 lines (125 loc) · 6.13 KB

README-zh.md

File metadata and controls

161 lines (125 loc) · 6.13 KB

Build Status Coverage Status Try node-crc16 on RunKit DeepScan Grade

Node CRC16 - (README in English)

MODBUS是一种应用层消息通讯协议, 使得用各种不同类型的总线或网络连接的设备支持C/S通信,被广泛应用于嵌入式应用通讯开发。协议中通信数据包的“CRC循环冗余校验和”的生成与校验, 如MODBUS串行线通信(第42页),Modbus-RTU通信(第75页),都采用了同一种算法。

本模块实现了该算法的 查表法 C++代码实现, Node原生模块的封装, 以及NodeJS模块的封装。

本模块有充分的单元测试和完善的使用文档。

版本选择

如果你的Node版本小于v8.x.x,请使用本模块的v1.x.x版本,否则请使用v2.x.x。 在本模块v2.x.x中,引入了NAPI来实现原生模块,有更好的兼容性。

使用

温馨提示: 其实最好的方法使用说明, 在源码的注释与单元测试的代码里面 :)

安装

npm install node-crc16

生成校验和crc16.checkSum

checkSum接收三个参数,前两个参数 (input, [encoding]) 其实是为了生成一个Buffer

crc16.checkSum('一个utf8字符串', 'utf8')

encoding默认值为hex

var sum = crc16.checkSum('a031ffb7');
sum.should.equal('726d');

第三个参数option,是对象类型。

  • option.retType,返回校验和的格式,取值:
    • 默认值hex,2字节大端字节序hex编码,如726d
    • array, 校验和单字节数组,如[114, 109]
    • int,校验和16字节整型,如29293
    • buffer,校验和以Buffer类型返回,如<Buffer 72 6d>
var sum = crc16.checkSum('a031ffb7', {retType: 'array'});
sum.should.eql([114, 109]);

验证校验和crc16.verifySum

verifySum传参与checkSum一致,前两个参数都是为了生成一个Buffer,且Buffer包含校验和

var stream = 'a031ffb7',
    sum = '726d';
var isValid = crc16.verifySum(stream + sum);
isValid.should.equal(true);

贡献代码

获取源码

# fork 源码,然后克隆到本地
git clone git@github.com:imnemo/crc16.git
cd crc16

目录结构

├── lib         //CRC16算法的C++实现
├── util        //工具方法
├── src         //Node原生模块的实现
├── test        //JS单元测试代码
├── test_cpp    //C++单元测试代码
├── index.js    //Node模块入口文件

安装依赖

npm install

C++单元测试

CRC16生成与校验算法的C++实现是独立的,如有修改该文件,完成后请编写相应的单元测试代码。 C++单元测试请参考的Catch,完成后请执行:

make test

保证全部测试用例通过。

JS单元测试

npm test 或者 ./node_modules/.bin/mocha --reporter spec

性能基准测试

使用benchmark.js

 >>> npm run benchmark

> node-crc16@1.0.0 benchmark /Users/nemo/code/imnemo/crc16
> node benchmark/benchmark.js

CEC16#checkSum x 905,071 ops/sec ±2.00% (83 runs sampled)
CRC16#verifySum x 1,540,940 ops/sec ±19.92% (65 runs sampled)
Fastest is CRC16#verifySum

使用nanobench

 >>> npm run nanobench

> node-crc16@1.0.0 nanobench /Users/nemo/code/imnemo/crc16
> node benchmark/nanobench.js

NANOBENCH version 2
> /Users/nemo/.nvm/versions/node/v8.1.2/bin/node benchmark/nanobench.js

# CRC16#checkSum 2,000,000 times
ok ~3.17 s (3 s + 166422442 ns)

# CRC16#verifySum 2,000,000 times
ok ~2.85 s (2 s + 848059820 ns)

all benchmarks completed
ok ~6.01 s (6 s + 14482262 ns)

提交

所有单元测试通过后,您就可以Pull一个Request了 :)

TODO

  • 增加JS代码lint
  • 增加变更日志
  • 增加JS代码单元测试
  • 增加JS代码测试覆盖率
  • 增加C++代码单元测试
  • 增加持续集成
  • 增加性能测试
  • 用NAPI重构Node原生模块部分
  • 添加 index.js.d 文件
  • 支持全局模块,提供CLI
  • 增加打赏入口

twitter: @imoncoding

qrcode_mp_oncoding

一个追求专业、规范、极简, 关注技术本质,笃信万物相通的公众号!