Re: what is wrong in my code?? (python 3.3)
On Friday, September 27, 2013 7:19:45 PM UTC+3, Denis McMahon wrote: > On Fri, 27 Sep 2013 06:54:48 -0700, dream4soul wrote: > > > > > #!c:/Python33/python.exe -u > > > import os, sys > > > print("Content-type: text/html; charset=utf-8\n\n") > > > print ('Hello, world!') > > > print('ранее предусматривалась смертная казнь.') > > > > > I see only first print, second it just question marks in my browser(code > > > edited in notepad++ with UTF-8 encode). what is wrong?? > > > > Sounds like your browser is ignoring the charset. Can you force the > > browser to utf-8? > > > > What happens if you create a plain html file with the same content and > > send it to your browser? > > > > eg: test.html: > > - > > Hello, world! > > ранее предусматривалась смертная казнь. > > - > > > > This really doesn't look like a python issue (again). > > > > -- > > Denis McMahon, denismfmcma...@gmail.com I rename file from test.py in test.txt and all works fine. So clearly problem it is not in file coding or browser. ANY IDEAS?? -- https://mail.python.org/mailman/listinfo/python-list
crc algorithm
Dear all, 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: 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 = 0x; 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); } python tries: def calc_crc(): crc_dat = c_ushort(0x0001) data = [0x00,0x00,0x34,0x35,0x38,0x35] for x in range(len(data)): pass c_work = c_ubyte(data[x]) #print(c_work) for x in range(8): pass if (c_ubyte(crc_dat.value & c_ushort(0x0001).value).value ^ c_ubyte(c_work.value & c_ubyte(0x01).value).value) == c_ubyte(0x01): crc_dat.value >>=1 crc_dat.value ^=0x8408 else: crc_dat.value >>=1 c_work.value >>=1 print(crc_dat) print(crc_dat.value) pass -- https://mail.python.org/mailman/listinfo/python-list
Re: crc algorithm
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 = 0x; > > > 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
Re: crc algorithm
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 = 0x; > > > 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
Re: crc algorithm
On Wednesday, September 3, 2014 10:19:29 AM UTC+3, Peter Otten wrote: > dream4s...@gmail.com wrote: > > > > > 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 = 0x; > > >> > > >> > 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 > > > > Are you sure? I get 0x9f41 with the C version you posted: > > > > $ cat crc.c > > #include > > > > 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 = 0x; > > 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); > > } > > > > main() > > { > > unsigned char data[] = "\x00\x00\x34\x35\x38\x35"; > > unsigned short crc = calc_crc(data, 6); > > printf("%x\n", crc); > > } > > $ gcc crc.c > > $ ./a.out > > 9f41 int main(int argc, char const *argv[]) { unsigned short rez; unsigned char a[]={0x30,0x30,0x34,0x35,0x38,0x35}; unsigned short val; rez=calc_crc(a,(int)sizeof(a)); printf("%#hx\n",rez ); return 0; } -- https://mail.python.org/mailman/listinfo/python-list
Re: crc algorithm
On Wednesday, September 3, 2014 10:19:29 AM UTC+3, Peter Otten wrote: > dream4s...@gmail.com wrote: > > > > > 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 = 0x; > > >> > > >> > 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 > > > > Are you sure? I get 0x9f41 with the C version you posted: > > > > $ cat crc.c > > #include > > > > 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 = 0x; > > 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); > > } > > > > main() > > { > > unsigned char data[] = "\x00\x00\x34\x35\x38\x35"; > > unsigned short crc = calc_crc(data, 6); > > printf("%x\n", crc); > > } > > $ gcc crc.c > > $ ./a.out > > 9f41 int main(int argc, char const *argv[]) { unsigned short rez; unsigned char a[]={0x30,0x30,0x34,0x35,0x38,0x35}; unsigned short val; rez=calc_crc(a,(int)sizeof(a)); printf("%#hx\n",rez ); return 0; } o$ gcc main.c o$ ./a.out 0x8c40 -- https://mail.python.org/mailman/listinfo/python-list
Re: crc algorithm
On Wednesday, September 3, 2014 12:00:10 PM UTC+3, Peter Otten wrote: > dream4s...@gmail.com wrote: > > > > > calc_crc(b'\x00\x00\x34\x35\x38\x35') > > > > > unsigned char a[]={0x30,0x30,0x34,0x35,0x38,0x35}; > > > > The first two bytes differ; you made an error on the input. Dear Peter, my apologies it's my mistake. Thank you for help. Problem solved. -- https://mail.python.org/mailman/listinfo/python-list
Re: crc algorithm
On Wednesday, September 3, 2014 12:00:10 PM UTC+3, Peter Otten wrote: > dream4s...@gmail.com wrote: > > > > > calc_crc(b'\x00\x00\x34\x35\x38\x35') > > > > > unsigned char a[]={0x30,0x30,0x34,0x35,0x38,0x35}; > > > > The first two bytes differ; you made an error on the input. Dear Peter, my apologies it's my mistake. Thank you for help. Problem solved -- https://mail.python.org/mailman/listinfo/python-list