CRC16(CCITT)的CRC测试向量

时间:2009-12-16 21:59:31

标签: crc

是否有人知道CRC16-CCITT的某些CRC测试向量?

我没有可以信任的CRC实现,需要测试某人的实现或我自己的实现。 (对于CRC32,我使用PNG code作为黄金标准,因为它是一个有信誉的参考实现。)

this site's CRC calculator看起来很有用,但我需要以某种方式验证正确性)


更新:上面的CRC计算器看起来很有用但它只需要ascii,无法输入十六进制。 ---输入十六进制输入非常尴尬。 (十六进制中的ASCII 12可以输入为%31%32,因此您不能只复制+粘贴十六进制字节的长字符串; %字符似乎也没有逸出)

我已经验证了this online calculator,它接受​​十六进制输入,针对CRC16,CRC16-CCITT和CRC32的Boost测试向量。

4 个答案:

答案 0 :(得分:2)

Boost有一个很好的CRC实现,你可以测试。据我所知,可以为CRC16配置它。 http://www.boost.org/doc/libs/1_41_0/libs/crc/index.html

似乎有一个示例如何在此页面上设置它来模拟CCITT:http://www.boost.org/doc/libs/1_41_0/libs/crc/crc.html

答案 1 :(得分:1)

Python的binascii包已经有一段时间CRC-16了。

使用binascii.crc_hqx(val, 0xFFFF)-前面的示例是...

$ python3
Python 3.7.3 (default, Dec 20 2019, 18:57:59) 
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import binascii
>>> tv = binascii.a2b_hex("12345670")
>>> hex(binascii.crc_hqx(tv, 0xFFFF))
'0xb1e4'
>>> tv = "123456789".encode("ascii")
>>> hex(binascii.crc_hqx(tv, 0xFFFF))
'0x29b1'

答案 2 :(得分:0)

以下是CCITT-16 CRC的两个测试向量(其多项式为X16 + X12 + X5 + 1(大端十六进制表示为0x1021);初始CRC值为0xFFFF。异或值为0。)是:

0x12345670 = 0xB1E4

0x5A261977 = 0x1AAD

答案 3 :(得分:0)

我找到了这个:

http://introcs.cs.princeton.edu/java/51data/CRC16CCITT.java.html

"123456789".getBytes("ASCII"); -> 0x29b1