On Tuesday, September 2, 2014 9:24:54 PM UTC+3, Peter Otten 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.
this doesn't work calc_crc(b'\x00\x00\x34\x35\x38\x35') rsult 0x9f41 , but c function gives us 0x8c40 -- https://mail.python.org/mailman/listinfo/python-list