数据包CRC计算方法
Packet CRC Computation Approach
我正在编写一个正在读取传入串行数据包的类。 数据包用标头、一些数据进行布局,后跟一个双字节 CRC。
我还编写了一个类,我可以在其中构建要发送的数据包。 此类具有 GenerateCRC(( 方法,该方法允许调用方计算他们通过调用其他方法构建的数据包的 CRC。 GenerateCRC(( 调用仅在正确设置数据包标头和数据后调用。 因此,此方法在 for 循环中迭代数据包,并以这种方式计算 CRC。
现在我正在编写代码以读取数据包,我需要通过计算 CRC 来验证它们。 我正在尝试尽可能多地重用以前的"构建器"类,因为当我在数据包中读取时,我想将其存储在内存中,最好的方法是使用"builder"类。 但是,我在计算CRC时遇到了障碍。
我正在考虑两种主要方法,我在权衡利弊和决定一种方法时遇到了麻烦。 以下是我的两个选择:
-
计算我在字节中读取的 CRC。 我正在读取的数据被推送到队列中,因此我一次弹出一个字节。 我会保持一个正在运行的"总"CRC,并在读入最后一个数据字节后立即完成计算。
-
仅在我读取完整数据包后计算CRC。 在这种情况下,我不必保留运行总计,但我必须再次迭代数据包。 我应该注意,这将允许我重用我以前编写的代码。
目前,我倾向于选项 1,并将"构建器"和"阅读器"之间的任何常见功能移动到单独的头文件中。 但是,我想确保第一个选项在性能方面实际上是更好的选项,因为它确实使我的代码更加混乱。
提前感谢您的帮助。
我会选择门#2。 这允许通过在两端使用相同的代码来更简单地验证代码,并且还允许使用更快的CRC算法一次处理四个或八个字节。
相关文章:
- 是否有一种标准方法来计算两个 asctime() 值之间的天数
- 有没有一种惯用的方法可以在不存储变换或不必要地重新计算的情况下找到数组变换的最小/最大值?
- 寻求提高Microsoft密封库计算效率的方法
- 在 C++20 计算范围内相邻对的最简洁明了的方法是什么?
- 计算浮点余数的最佳方法
- 计算将整数n分解为4平方和的方法的数量
- 计算两个uint8_t变量之间差值的最快方法是什么?
- 使用 MC 方法计算积分
- 计算 <Classtype*> 向量中所有项的布尔值的最有效方法,如果全部为真则返回 true
- C++ std::string 中是否有任何函数可以计算两个字符串的相同起始字符的总数或任何最佳方法
- C/C++ 方法中最快/最短计算二进制数字总和/又名二进制中的 1 数
- 对于我扩展此程序来计算最高10x10矩阵的倒数的最简单方法是什么
- 什么是计算C中PI的最有效方法
- 基于变量输入的泛型类方法计算
- C++另一种方法计算平均值
- 蒙特卡罗方法计算π
- 用泰勒方法计算圆周率
- c++计算器,用什么方法计算
- C++ 使用霍纳方法计算多项式的递归帮助
- 在c++和Python中使用蒙特卡罗方法计算看涨期权价格时显着的价格差异