串行连接的CRC-16具体示例
CRC-16 specific example for serial connection
在使用以下 PDF 时,
中有一个示例
Section 4: CRC-16 Code and Example
(第 95 或 91 页)显示 CRC16 值为 133 (LSB)
和 24 (MSB)
.
的串行数据包
不过,我试过不同的计算器,例如:
但无论我使用何种字节组合,我都无法获得 PDF 指示的 CRC16 值。
如何正确计算示例中的 CRC16,最好使用这些计算器之一? (否则,C/C++ 代码应该可以工作)。
谢谢。
这个特定的 CRC CRC-16/ARC. crcany 生成这个 CRC 的代码,其中包括这个简单的按位例程:
#include <stddef.h>
#include <stdint.h>
uint16_t crc16arc_bit(uint16_t crc, void const *mem, size_t len) {
unsigned char const *data = mem;
if (data == NULL)
return 0;
for (size_t i = 0; i < len; i++) {
crc ^= data[i];
for (unsigned k = 0; k < 8; k++) {
crc = crc & 1 ? (crc >> 1) ^ 0xa001 : crc >> 1;
}
}
return crc;
}
标准接口是 crc = crc16arc_bit(0, NULL, 0);
以获得初始值(在本例中为零),然后 crc = crc16arc_bit(crc, data, len);
使用消息的连续部分来计算 CRC。
如果您对附录中的九字节消息执行此操作,{1, 2, 1, 0, 17, 3, 'M', 'O', 'C'}
,则返回的 CRC 为 0x1885
,它具有十进制的最低有效字节 133
,最十进制的有效字节 24
。
更快的 table 驱动例程也由 crcany 生成。
如果您将 01 02 01 00 11 03 4d 4f 43
作为十六进制输入 Lammert Bies 的计算器,第一个名为“CRC-16”的计算器会给出 0x1885
.
如果将 0102010011034d4f43
赋给 crccalc.com 并计算 Calc-CRC16,则第二行是 CRC-16/ARC,结果为 0x1885
.
在使用以下 PDF 时,
中有一个示例Section 4: CRC-16 Code and Example
(第 95 或 91 页)显示 CRC16 值为 133 (LSB)
和 24 (MSB)
.
不过,我试过不同的计算器,例如:
但无论我使用何种字节组合,我都无法获得 PDF 指示的 CRC16 值。
如何正确计算示例中的 CRC16,最好使用这些计算器之一? (否则,C/C++ 代码应该可以工作)。
谢谢。
这个特定的 CRC CRC-16/ARC. crcany 生成这个 CRC 的代码,其中包括这个简单的按位例程:
#include <stddef.h>
#include <stdint.h>
uint16_t crc16arc_bit(uint16_t crc, void const *mem, size_t len) {
unsigned char const *data = mem;
if (data == NULL)
return 0;
for (size_t i = 0; i < len; i++) {
crc ^= data[i];
for (unsigned k = 0; k < 8; k++) {
crc = crc & 1 ? (crc >> 1) ^ 0xa001 : crc >> 1;
}
}
return crc;
}
标准接口是 crc = crc16arc_bit(0, NULL, 0);
以获得初始值(在本例中为零),然后 crc = crc16arc_bit(crc, data, len);
使用消息的连续部分来计算 CRC。
如果您对附录中的九字节消息执行此操作,{1, 2, 1, 0, 17, 3, 'M', 'O', 'C'}
,则返回的 CRC 为 0x1885
,它具有十进制的最低有效字节 133
,最十进制的有效字节 24
。
更快的 table 驱动例程也由 crcany 生成。
如果您将 01 02 01 00 11 03 4d 4f 43
作为十六进制输入 Lammert Bies 的计算器,第一个名为“CRC-16”的计算器会给出 0x1885
.
如果将 0102010011034d4f43
赋给 crccalc.com 并计算 Calc-CRC16,则第二行是 CRC-16/ARC,结果为 0x1885
.