javascript - Python CRC for cashcode driver (From JS to Python) -
i try re-write ccnet driver cashcode, node python. but, realy can`t run crc generator.
you can find "working" code on github repo
here js function:
function getcrc16(bufdata) { var polynomial = 0x08408; var sizedata = bufdata.length; var crc, i, j; crc = 0; (i = 0; < sizedata; i++) { crc ^= bufdata[i]; (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); }
i try crcmod
, it`s not predefined function, , when try set polynominal, error
here sometime working code:
@staticmethod def getcrc16(data): crc = 0 in range(0, len(data), 2): crc ^= int(str(data[i:(i+2)]), 16) j in range(8): if (crc & 0x0001): crc >>= 1 crc ^= 0x8408 else: crc >>= 1 crc = format(crc, '02x') return crc[2:4] + crc[0:2]
and
crc ^= int(str(data[i:(i+2)]), 16) valueerror: invalid literal int() base 16: '\x02\x03'
help me function. (input binary/integers or hex-strings)
upd: : works bytearray.fromhex(data)
. thanks)
@staticmethod def getcrc16(data): data = bytearray.fromhex(data) crc = 0 bit in data: crc ^= bit 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]
you need
my_int = struct.unpack("h",data[i:i+2]) # my_int = 770 ?
you need truncate result anding 0xffff (i think) (since python ints keep going forever)
Comments
Post a Comment