【问题标题】:CRC calculation over 26 bytesCRC 计算超过 26 个字节
【发布时间】:2015-08-03 07:14:36
【问题描述】:

我正在实现简单的协议,我需要从以下结构计算 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)。

【问题讨论】:

    标签: javascript node.js crc


    【解决方案1】:

    你可以从这个开始:

    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);
    }
    

    【讨论】:

    • 我添加了缺失的信息。但是看起来,它运作良好:)。谢谢。
    猜你喜欢
    • 2019-09-27
    • 2021-03-22
    • 2023-03-15
    • 1970-01-01
    • 2020-11-18
    • 2013-04-03
    • 1970-01-01
    • 2017-03-01
    • 2011-11-08
    相关资源
    最近更新 更多