将几行C转换为Python

时间:2011-06-08 01:18:47

标签: python c translation

我需要一些帮助将C转换为python。我现在大约4年没有使用过c ++,当我使用它时,我只是新的基础知识。此代码段的上下文是读取文件并创建校验和

int ff7_checksum( void* qw )
{
   int i = 0, t, d;
   long r = 0xFFFF, len = 4336;
   long pbit = 0x8000;
   char* b=(char*)qw;

   while( len-- ) {
      t = b[i++];
      r ^= t << 8;
      for(d=0;d<8;d++) {
         if( r & pbit )
            r = ( r << 1 ) ^ 0x1021;
         else
            r <<= 1;
      }
      r &= ( 1 << 16 ) - 1;
   }
   return (r^0xFFFF)&0xFFFF;
}

1 个答案:

答案 0 :(得分:0)

我假设qw指向一个已知大小的缓冲区(4336)并且实际上并不代表一个字符串(即它可能包含仍应处理的\0个字符。)

但是,在Python(2.x)中,我们通常仍然将其建模为字符串,因为字符串可能包含嵌入的\0字节,并且知道它自己的长度。因此也没有理由对长度进行硬编码。

更具惯用性,我们得到类似的内容:

def ff7_checksum(data): # data used to be 'qw'
  all_bits = 0xFFFF # a 16-bit value with all bits set.
  result = all_bits # result used to be 'r'
  pbit = 0x8000 # the highest-order bit in a 16-bit value.

  for byte in data: # byte used to be 't'
    result ^= byte << 8
    for i in range(8):
      result = (result << 1) ^ (0x1021 if result & pbit else 0)
    result &= all_bits
  return result ^ all_bits # the original &-mask is not necessary