I reply again attaching a file as I see the editor wrecked the tab
indentation.
Gonzalo Monzón escribió:
Hi all!
I have been translating some Python custom C extension code into
Python, as I need these modules to be portable and run on a PocketPC
without the need of compile (for the purpose its a must 2.4 as it is
the last PythonCE release with great improvements).
But I've been stuck with a script wich does not work as expected once
translated to python, 2.4
In the meantime, I thought I could test it with an old 2.3 version I
have installed too on my computer, and found it run as expected, but
see the FutureWarning, so googled a bit and found PEP 237 and long
integer integration issue, but then can't find any workaround to fix
the code for Python 2.4
Hope somebody could point some suggestion, or perhaps, the solution is
pretty simple, but I missed it.
As I said, the code works fine on 2.3. I attach the code below.
The trouble is on the CalcCRC16 function, as you can see on the
FutureWarning message.
InitCRC16 function does some bitwise xor's too, but I checked it and
works as expected. Thought because only happen to be with small values
there.
Thanks in advance for any help,
Gonzalo
##############################
Python 2.3.2:
pytest1.py:90: FutureWarning: x<<y losing bits or changing sign will
return a long in Python 2.4 and up
crc = gCRC16Table[((crc >> 8) & 255)] ^ (crc << 8) ^ ord(str[x])
67560050
##############################
Python 2.4.2:
22002496167782427386022437441624938050682666541682
*Expected result is 67560050*
# #############################
# pytest1.py
gCRC16Table = []
def InitCRC16():
global gCRC16Table
for i in xrange(0,256):
crc = i << 8
for j in xrange(0,8):
if (crc & 0x8000) != 0:
tmp = 0x1021
else:
tmp = 0
crc = (crc << 1) ^ tmp
gCRC16Table.append(crc)
def CalcCRC16(str):
global gCRC16Table
crc = 0xFFFF for x in xrange(0,len(str)):
crc = gCRC16Table[((crc >> 8) & 255)] ^ (crc << 8) ^ ord(str[x])
return crc
test = "123456asdfg12345123"
InitCRC16()
print CalcCRC16(test)
gCRC16Table = []
def InitCRC16():
global gCRC16Table
for i in xrange(0,256):
crc = i << 8
for j in xrange(0,8):
if (crc & 0x8000) != 0:
tmp = 0x1021
else:
tmp = 0
crc = (crc << 1) ^ tmp
gCRC16Table.append(crc)
def CalcCRC16(str):
global gCRC16Table
crc = 0xFFFF
for x in xrange(0,len(str)):
crc = gCRC16Table[((crc >> 8) & 255)] ^ (crc << 8) ^ ord(str[x])
return crc
test = "123456asdfg12345123"
InitCRC16()
print CalcCRC16(test)
--
http://mail.python.org/mailman/listinfo/python-list