-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