2015-08-03 4 views
0

Я реализует простой протокол, и мне нужно вычислить CRC из следующей структуры:CRC расчет в течение 26 байт

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. Поэтому я загрузил crc package из NPM, который уже реализовал эту функцию.

Было бы здорово, если бы вы отправили мне код, потому что я понятия не имею, что делать (вы можете использовать незаявленную crc функцию, эквивалентную this).

ответ

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

Я добавил недостающую информацию. Однако, похоже, это хорошо работает :). Спасибо. – user1518183

Смежные вопросы