也许我只是没有看到它,但CRC32似乎不必要地复杂化,或者在我能在网上找到的任何地方都没有充分解释.
我理解它是消息值的非基于进位的算术除法的余数除以(生成器)多项式,但它的实际实现逃脱了我.
我读过CRC无错误检测算法的指南,我必须说它不是无痛的.它完全超越了理论,但作者从未得到过简单的"就是这样".他确实说过标准CRC32算法的参数是什么,但是他忽略了如何清楚地列出它.
得到我的部分就是当他说"这就是它"然后补充说,"顺便说一句,它可以逆转或以不同的初始条件开始",并没有给出最终方式的明确答案在给出他刚刚添加的所有更改的情况下计算CRC32校验和.
我试图在C中编写表格的形式:
for (i = 0; i < 256; i++)
{
temp = i;
for (j = 0; j < 8; j++)
{
if (temp & 1)
{
temp >>= 1;
temp ^= 0xEDB88320;
}
else {temp >>= 1;}
}
testcrc[i] = temp;
}
Run Code Online (Sandbox Code Playgroud)
但这似乎产生的价值与我在互联网上其他地方找到的价值观不一致.我可以使用我在网上找到的值,但我想了解它们是如何创建的.
任何帮助清除这些令人难以置信的令人困惑的数字将非常感激.
我正在研究具有不同输出功能的嵌入式系统(数字输出,串行,模拟等).我试图找出一种干净的方法来传递许多将控制这些功能的变量.
我不需要经常传递所有这些,但我希望有一个函数可以读取输入数据(在本例中来自TCP网络),然后解析数据(IE,第3个字节包含8个数字输出的状态(根据该字节中的哪个位为高或低)),并将其放入变量中,然后我可以在程序中的其他地方使用.
我希望该函数与main()函数分开,但这样做需要将指针传递给它要写入的大约20个左右的变量.我知道我可以将变量设置为全局变量,但是我试图通过将一个函数允许编辑该变量,并将其传递给函数,使其更容易调试.
我最好的想法是一个结构,只是传递指针,但不确定是否有更有效的方法,特别是因为只有一个功能需要同时访问所有这些,而大多数其他只需要存储在这一堆状态变量中的部分信息.
所以,无论如何,是否有一种干净的方法可以在需要编辑的函数之间立即发送许多变量?