On Tuesday, September 2, 2014 9:43:52 PM UTC+3, Chris Kaynor wrote: > 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 <__pe...@web.de> wrote: > > > > dream...@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
this doesn't work binascii.crc32(data) return 32 bit data , c function crc return 16 bit and it is not standard crc -- https://mail.python.org/mailman/listinfo/python-list