除非输入字节相等,否则 CRC32 输出不正确
Incorrect CRC32 output unless input bytes are equal
出于测试目的,我需要重现硬件 CRC 计算器的输出。它是为以太网 CRC 32 设置的,采用 trace32 格式:
/CRC 32. 0x04C11DB7 1 1 0FFFFFFFF 0FFFFFFFF(校验和宽度、多项式、输入反射、输出反射、crc 初始化、最终 XOR)
如果我给它输入 4 个字节相等的值(例如 0x12121212,因为每个字节都是 0x12),输出将匹配我使用 CRC32 或 python.
计算的值
但是,如果我向它提供 4 个字节不相等的任何值,结果就会关闭。例如 0x12341234 将 return 0x093c454b(应该是 0xa1768922)。
或者 0x12345678 将 return 0xAF6D87D2(应该是 0x4a090e98)。
在 HW 中我只能 select 初始值和多项式,除了给它 4 个字节来计算。滚动计算(多个单词值)的行为方式相同,只要输入的每个单词的所有字节都相同,输出就是正确的。否则,输出关闭。
我对 CRC32 不是很了解,运行 没有想法。任何指针将不胜感激,我在这里做错了什么?我仔细检查了多项式,但如果那是错误的,我很少能得到正确的结果,对吧?
谢谢!
你得到了你的“应该”的正确字节顺序。你通过反转字节得到你的“will return”。对于您描述的 CRC,字节 12 34 56 78
给出 0x4a090e98
。字节 78 56 34 12
给出了 CRC 0xaf6d87d2
.
你的问题很模糊,没有代码也没有使用方法。我只能猜测您正在为 CRC 例程提供一个 32 位值而不是字节,并且当您期望 big-endian 顺序时它正在按 little-endian 顺序处理。
出于测试目的,我需要重现硬件 CRC 计算器的输出。它是为以太网 CRC 32 设置的,采用 trace32 格式: /CRC 32. 0x04C11DB7 1 1 0FFFFFFFF 0FFFFFFFF(校验和宽度、多项式、输入反射、输出反射、crc 初始化、最终 XOR)
如果我给它输入 4 个字节相等的值(例如 0x12121212,因为每个字节都是 0x12),输出将匹配我使用 CRC32 或 python.
计算的值但是,如果我向它提供 4 个字节不相等的任何值,结果就会关闭。例如 0x12341234 将 return 0x093c454b(应该是 0xa1768922)。
或者 0x12345678 将 return 0xAF6D87D2(应该是 0x4a090e98)。
在 HW 中我只能 select 初始值和多项式,除了给它 4 个字节来计算。滚动计算(多个单词值)的行为方式相同,只要输入的每个单词的所有字节都相同,输出就是正确的。否则,输出关闭。
我对 CRC32 不是很了解,运行 没有想法。任何指针将不胜感激,我在这里做错了什么?我仔细检查了多项式,但如果那是错误的,我很少能得到正确的结果,对吧?
谢谢!
你得到了你的“应该”的正确字节顺序。你通过反转字节得到你的“will return”。对于您描述的 CRC,字节 12 34 56 78
给出 0x4a090e98
。字节 78 56 34 12
给出了 CRC 0xaf6d87d2
.
你的问题很模糊,没有代码也没有使用方法。我只能猜测您正在为 CRC 例程提供一个 32 位值而不是字节,并且当您期望 big-endian 顺序时它正在按 little-endian 顺序处理。