不知道如何计算CRC7
Can't figure out how to calculate CRC7
我需要为一系列字节
计算CRC7 我的多项式 x^7+x^3+1
这是我写的一个函数:
unsigned char CRC7(const unsigned char message[], const unsigned int length)
{
const unsigned char poly = 0b10001001;
unsigned char crc = 0;
for (int i = 0; i < length; i++ )
{
crc ^= message[i];
for (int j = 0; j < 8; j++)
crc = crc & 0x1 ? (crc >> 1) ^ poly : crc >> 1;
}
return crc;
}
但它给出了错误的结果。例如,0x82 和 0x04 返回0x57,而它必须0x61
这个在线计算器对我有用:http://www.ghsi.de/pages/subpages/Online%20CRC%20Calculation/
我不能只是从中复制粘贴一个函数,因为我需要它以无符号字符的形式返回值。
我在哪里会犯错误?
要模仿引用的站点,请向左移动并仅使用crc
的 7 位。
下面的异或crc
8 位消息,但通过使用poly << 1
,有效地计算了 7 个最高有效位上的 CRC。
unsigned char CRC7(const unsigned char message[], const unsigned int length) {
const unsigned char poly = 0b10001001;
unsigned char crc = 0;
for (unsigned i = 0; i < length; i++) {
crc ^= message[i];
for (int j = 0; j < 8; j++) {
// crc = crc & 0x1 ? (crc >> 1) ^ poly : crc >> 1;
crc = (crc & 0x80u) ? ((crc << 1) ^ (poly << 1)) : (crc << 1);
}
}
//return crc;
return crc >> 1;
}
当然const unsigned char poly = 0b10001001;
可以替换
const unsigned char poly = 0b10001001;
const unsigned char poly2 = 0b10001001 << 1;
crc = (crc & 0x80u) ? ((crc << 1) ^ poly2) : (crc << 1);
测试
int main(void) {
printf("%xn", CRC7((unsigned char*)"x82x04",2));
}
输出
61
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 递归函数计算序列中的平方和(并输出过程)
- (C++)分析树以计算返回错误值的简单算术表达式
- 我的字符计数代码计算错误.为什么
- 在计算中使用二的幂有多有利可图
- 如何计算文件中的"columns"数?
- 计算排序向量的向量中唯一值的计数
- 如何使用 std::累积在 C++ 中计算总和立方体
- 使用Qt C++计算类似Git的SHA1哈希
- OpenCV C++.快速计算混淆矩阵
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- C++如何计算用户输入的数字中的偶数位数
- 如何计算数据类型的范围,例如int
- 类似枚举的计算常量
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- 计算缩放多边形的比例,得到给定的多边形面积
- 在C++中如何在没有pow的情况下进行基础计算
- 计算平均值,不包括上次得分
- 不知道如何计算CRC7