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