将几行C语言翻译成Python语言

2024-10-03 04:29:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要一点帮助,把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;
}

Tags: 文件语言len代码段校验longint基础知识
1条回答
网友
1楼 · 发布于 2024-10-03 04:29:33

我假设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

相关问题 更多 >