我有18005个十六进制帧的数据,我想同时计算所有帧的crc-16(0xffff)
然后追加。
答案 0 :(得分:1)
您的CRC没有充分说明。您是否尝试与使用16位CRC的某些协议兼容?如果是这样,您需要找出该CRC的参数。你可以找到here a list of 28 different 16-bit CRC definitions。您需要的那个可能是其中之一,或者它可能是另一组参数。
“(0xffff)”在你的名字中意味着什么并不清楚。初始值?最后的独家或?空字符串的CRC?还有别的吗?
通过“同时”计算所有帧的CRC,不清楚你的意思。你为什么同时说?
附加CRC时,您还需要知道应该附加的位或字节顺序。一个双字节CRC可以以小端或大端顺序附加。
更新
根据评论中的示例CRC,所需的CRC-16为CRC-16/CCITT-FALSE from the RevEng catalog。您可以使用crcany生成计算此CRC的C代码。它将以不同的速度和复杂度生成逐位,逐字节和逐字的代码。生成的逐位例程是:
#include <stdint.h>
unsigned crc16ccitt_false_bit(unsigned crc, void const *data, size_t len) {
if (data == NULL)
return 0xffff;
while (len--) {
crc ^= (unsigned)(*(unsigned char const *)data++) << 8;
for (unsigned k = 0; k < 8; k++)
crc = crc & 0x8000 ? (crc << 1) ^ 0x1021 : crc << 1;
}
crc &= 0xffff;
return crc;
}
(当buf
为NULL
时,返回初始CRC值。)
您可以通过检查从您的示例流中判断CRC是以小端还是大端顺序附加的。