uint32_t crc32(uint8_t *data, uint16_t length) { uint8_t i; uint32_t crc = 0xffffffff; // Initial value while(length--) { crc ^= *data++; // crc ^= *data; data++; for (i = 0; i < 8; ++i) { if (crc & 1) crc = (crc >> 1) ^ 0xEDB88320;// 0xEDB88320= reverse 0x04C11DB7 else crc = (crc >> 1); } } return ~crc; }转为python
时间: 2024-02-14 16:13:28 浏览: 154
8位16位和32位的CRC算法
以下是将给定的 C 代码转换为 Python 代码的结果:
```python
def crc32(data, length):
crc = 0xFFFFFFFF # Initial value
for i in range(length):
crc ^= data[i]
for j in range(8):
if crc & 1:
crc = ((crc >> 1) ^ 0xEDB88320) & 0xFFFFFFFF # 0xEDB88320= reverse 0x04C11DB7
else:
crc >>= 1
return (~crc) & 0xFFFFFFFF
```
和之前的代码一样,需要使用掩码来确保结果正确。另外,由于这里使用的是 32 位无符号整数,因此需要使用 Python 中的对应类型 `uint32_t`,即 `0xFFFFFFFF`。
阅读全文