我正在实现简单的协议,我需要根据以下结构计算CRC:

type    (1 byte, unsigned)
address (1 byte, unsigned)
dataID  (4 bytes, unsigned, little-endian)
data    (4 bytes, unsigned, little-endian)
data    (4 bytes, unsigned, little-endian)
data    (4 bytes, unsigned, little-endian)
data    (4 bytes, unsigned, little-endian)
data    (4 bytes, unsigned, little-endian)
-----------------
=       (26 bytes)


您可以将其想象为简单的JavaScript对象:

var message = {
  type:    0x11,
  address: 0x01,
  dataID:  0xFFFFFFFF,
  data: [
    0xFFFFFFFF,
    0xFFFFFFFF,
    0xFFFFFFFF,
    0xFFFFFFFF,
    0xFFFFFFFF
  ]
}


从这个对象,我需要计算CRC。不幸的是,在手册中只有CRC calculation includes Message type, Slave Address Data-ID's and data values. CRC calculation is performed over 26 bytes.,所以我不确定该怎么办。

CRC使用CRC16-CCIT函数计算。因此,我从NPM下载了已经实现了此功能的crc package

如果您向我发布代码,那就太好了,因为我不知道该怎么做(您可以使用未声明的crc函数,该函数等效于this)。

最佳答案

您可以从以下内容开始:

var crc16ccitt = require('crc').crc16ccitt;

function checksum(message) {
  var buf = new Buffer(26);
  buf.writeUInt8(message.type,      0);
  buf.writeUInt8(message.address,   1);
  buf.writeUInt32LE(message.dataID, 2);
  for (var i = 0; i < 5; i++) {
    buf.writeUInt32LE(message.data[i], 6 + i * 4);
  }
  return crc16ccitt(buf);
}

关于javascript - 超过26个字节的CRC计算,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31781439/

10-16 00:07