在CRC16规范中,有一段C代码可用于开发GDL90 -16校验和表。我已经将其转换为Python3.8,但结果是胡说八道,表值单调增长到超过16位。我做错了什么?
GDL90代码:
void crcInit( void )
{
unsigned int i, bitctr, crc;
for (i = 0; i < 256; i++)
{
crc = (i << 8);
for (bitctr = 0; bitctr < 8; bitctr++)
{
crc = (crc << 1) ^ ((crc & 0x8000) ? 0x1021 : 0);
}
Crc16Table[i] = crc;
}
}我的翻译是:
crcTable = []
for i in range(256):
crc = (i << 8)
for bitctr in range(8):
# original line crc = (crc << 1) ^ ((crc & 0x8000) ? 0x1021 : 0)
if (crc & 0x8000):
val = 0x1021
else:
val = 0
crc = (crc << 1) ^ val
crcTable.append(hex(crc))发布于 2021-09-30 18:27:41
不要使用hex(crc) -它会将值转换为字符串。您没有包含Crc16Table的c定义-我猜您想要将8位或16位值保存到表中,以便保存crc&0xff或crc&0xffff
https://stackoverflow.com/questions/69396844
复制相似问题