是否有人知道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测试向量。
答案 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