我需要一些帮助将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;
}
答案 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