-5
我需要将此CRC32算法转换为python(使用3.3),但我是一个python noob。我试过建立在binascii.crc32()中,但CRC不正确。显然,STMicro做的CRC32有点不同。我发现了一种可行的算法,现在我只需要它在python中。将此CRC32算法转换为Python 3.3
//****************************************************************************
DWORD Crc32Fast(DWORD Crc, DWORD Data)
{
static const DWORD CrcTable[16] = { // Nibble lookup table for 0x04C11DB7 polynomial
0x00000000,0x04C11DB7,0x09823B6E,0x0D4326D9,0x130476DC,0x17C56B6B,0x1A864DB2,0x1E475005,
0x2608EDB8,0x22C9F00F,0x2F8AD6D6,0x2B4BCB61,0x350C9B64,0x31CD86D3,0x3C8EA00A,0x384FBDBD };
Crc = Crc^Data; // Apply all 32-bits
// Process 32-bits, 4 at a time, or 8 rounds
Crc = (Crc << 4)^CrcTable[Crc >> 28]; // Assumes 32-bit reg, masking index to 4-bits
Crc = (Crc << 4)^CrcTable[Crc >> 28]; // 0x04C11DB7 Polynomial used in STM32
Crc = (Crc << 4)^CrcTable[Crc >> 28];
Crc = (Crc << 4)^CrcTable[Crc >> 28];
Crc = (Crc << 4)^CrcTable[Crc >> 28];
Crc = (Crc << 4)^CrcTable[Crc >> 28];
Crc = (Crc << 4)^CrcTable[Crc >> 28];
Crc = (Crc << 4)^CrcTable[Crc >> 28];
return(Crc);
}
//****************************************************************************
DWORD Crc32FastBlock(DWORD Crc, DWORD Size, DWORD *Buffer) // 32-bit units
{
while(Size--)
Crc = Crc32Fast(Crc, *Buffer++);
return(Crc);
}
由于这不是代码翻译服务 – jonrsharpe
我正在投票结束这个题目,因为它不是代码翻译服务。我建议在python关闭之前快速粘贴你的努力。 – eleanora
@eleanora无需匆忙;如果OP在暂挂状态下对其进行编辑,它将自动碰撞到重新打开队列以供审阅。 – jonrsharpe