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

Reply via email to