Javascript 现金代码驱动程序的Python CRC(从JS到Python)

Javascript 现金代码驱动程序的Python CRC(从JS到Python),javascript,python,serial-port,crc16,Javascript,Python,Serial Port,Crc16,我尝试为CashCode重新编写CCNET驱动程序,从node到Python。 但是,我真的不能运行CRC发生器 您可以在上找到“工作”代码 以下是JS函数: function getCRC16(bufData) { var POLYNOMIAL = 0x08408; var sizeData = bufData.length; var CRC, i, j; CRC = 0; for (i = 0; i < sizeData; i++) {

我尝试为CashCode重新编写CCNET驱动程序,从node到Python。 但是,我真的不能运行CRC发生器

您可以在上找到“工作”代码

以下是JS函数:

function getCRC16(bufData) {
    var POLYNOMIAL = 0x08408;
    var sizeData = bufData.length;
    var CRC, i, j;
    CRC = 0;
    for (i = 0; i < sizeData; i++) {
        CRC ^= bufData[i];
        for (j = 0; j < 8; j++) {
            if (CRC & 0x0001) {
                CRC >>= 1;
                CRC ^= POLYNOMIAL;
            } else CRC >>= 1;
        }
    }

    var buf = new Buffer(2);
    buf.writeUInt16BE(CRC, 0);
    CRC = buf;

    return Array.prototype.reverse.call(CRC);
}
我得到

CRC ^= int(str(data[i:(i+2)]), 16)
ValueError: invalid literal for int() with base 16: '\x02\x03'
帮我做这个功能。(输入二进制/整数或十六进制字符串)

UPD::它与
bytearray.fromhex(数据)
一起工作。(谢谢)

你需要

my_int = struct.unpack("h",data[i:i+2])
# my_int = 770 ?

您还需要通过使用0xFFFF(我认为)对结果进行anding来截断结果(因为python ints将永远保持上升)

因为python 2.6:
bytearray.fromhex(数据)

例如

@staticmethod 
def getCRC16(data):
    data = bytearray.fromhex(data)
    CRC = 0
    for bit in data:
        CRC ^= bit
        for j in range(0, 8):
            if (CRC & 0x0001):
                CRC >>= 1
                CRC ^= 0x8408
            else:
                CRC >>= 1
    CRC = format(CRC, '02x')
    return CRC[2:4] + CRC[0:2]
my_int = struct.unpack("h",data[i:i+2])
# my_int = 770 ?
for byte in bytearray.fromhex(data):
CRC ^= byte
...