CRC(循环冗余校验)用一次多项式除法给数据算出一个校验值,附在数据后面。接收方重新计算,值不一致就说明传输出错。CRC-16 输出 16 位,检错能力强、计算开销小,是 Modbus RTU、USB、蓝牙、X.25 等协议的标配。
同样叫「CRC-16」,参数不同结果完全不同。一个 CRC-16 算法由 5 个参数确定:多项式 Poly、初始值 Init、结果异或 XorOut、输入反射 RefIn、输出反射 RefOut。
123456789 的 CRC,并和该算法的标准检查值比对(✔ 一致 / ✘ 参数被改),方便确认选对了算法。DE AD BE EF,空格可有可无)、Base64,也可直接选文件。0x 前缀)、无符号十进制、有符号十进制。全部在浏览器本地计算,数据不上传。
| 名称 | Poly | Init | XorOut | RefIn/Out | 检查值(123456789) |
|---|---|---|---|---|---|
| CRC-16/ARC (IBM) | 0x8005 | 0x0000 | 0x0000 | true | 0xBB3D |
| CRC-16/MODBUS | 0x8005 | 0xFFFF | 0x0000 | true | 0x4B37 |
| CRC-16/USB | 0x8005 | 0xFFFF | 0xFFFF | true | 0xB4C8 |
| CRC-16/CCITT-FALSE | 0x1021 | 0xFFFF | 0x0000 | false | 0x29B1 |
| CRC-16/XMODEM | 0x1021 | 0x0000 | 0x0000 | false | 0x31C3 |
| CRC-16/KERMIT | 0x1021 | 0x0000 | 0x0000 | true | 0x2189 |
| CRC-16/X-25 | 0x1021 | 0xFFFF | 0xFFFF | true | 0x906E |
Q:为什么同一段数据在别的工具算出来不一样?
A:几乎都是参数不同。先看两边的 Poly / Init / XorOut / RefIn / RefOut 是否完全一致,再用 123456789 的检查值对一下算法。
Q:结果要不要交换高低字节? A:本工具给的是算法定义的数值。实际报文的字节序由协议规定 —— Modbus RTU 的 CRC 是低字节在前,很多串口助手也按这个显示,需要时自己调换两个字节。
Q:MODBUS 和 ARC 什么关系? A:多项式和反射都一样(0x8005,反射),只有初始值不同:ARC 用 0x0000,MODBUS 用 0xFFFF。
Q:Hex 输入要不要带 0x 或空格?
A:都可以。工具会自动去掉 0x、空格、逗号等,只要十六进制位数是偶数即可。
Q:能校验文件吗? A:能,选文件即可,整文件读入后计算。大文件会占内存,处理全程在本地。