Also, depending on the use-case, binascii.crc32 might also work fine: https://docs.python.org/2/library/binascii.html#binascii.crc32
import binascii def calc_crc(data): return binascii.crc32(data) Much simpler. Chris On Tue, Sep 2, 2014 at 11:24 AM, Peter Otten <__pete...@web.de> wrote: > dream4s...@gmail.com wrote: > > > I have trouble to implement crc algorithm in python 3.3 > > > > c version work perfect. I try to use bytes, int and c_types without any > > success can some who help me: > > ctypes is for interfacing with C; don't use it in regular code. > > > c version: > > > > unsigned short calc_crc(const void *p_dat, int l_dat){ > > unsigned char *dat_ptr; > > int loopc; > > unsigned short crc_dat; > > unsigned char c_work; > > > > dat_ptr = (unsigned char*)p_dat; > > crc_dat = 0x0000; > > for (; l_dat > 0; l_dat--) > > { > > c_work = *(dat_ptr++); > > for (loopc = 0; loopc < 8; loopc++) > > { > > if ((((unsigned char )(crc_dat & 0x0001)) ^ > > (c_work & 0x01)) == 0x01) > > { > > crc_dat >>=1 ; > > crc_dat ^=0x8408; > > } else { > > crc_dat >>=1; > > > > } > > c_work >>=1; > > } > > } > > return(crc_dat); > > } > > A near-literal translation would be: > > def calc_crc(data): > crc = 0 > for work in data: > for i in range(8): > if (crc & 1) ^ (work & 1): > crc >>= 1 > crc ^= 0x8408 > else: > crc >>= 1 > work >>= 1 > return crc > > I don't see any operation where the "unboundedness" of Python's integer > type > could be a problem -- but no guarantees. > > -- > https://mail.python.org/mailman/listinfo/python-list >
-- https://mail.python.org/mailman/listinfo/python-list