Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 分组CRC计算方法_C++_Performance_Crc - Fatal编程技术网

C++ 分组CRC计算方法

C++ 分组CRC计算方法,c++,performance,crc,C++,Performance,Crc,我正在编写一个类,该类正在读取传入的串行数据包。数据包以一个报头、一些数据和一个两字节的CRC排列 我还编写了一个类,在这个类中,我可以建立要发送的数据包。此类具有GenerateRC()方法,该方法允许调用方为通过调用其他方法建立的数据包计算CRC。GenerateRC()调用仅在正确设置数据包头和数据后才被调用。因此,该方法在for循环中对数据包进行迭代,并以此方式计算CRC 现在我正在编写代码来读取数据包,我需要通过计算CRC来验证它们。我试图尽可能多地重用以前的“builder”类,因为

我正在编写一个类,该类正在读取传入的串行数据包。数据包以一个报头、一些数据和一个两字节的CRC排列

我还编写了一个类,在这个类中,我可以建立要发送的数据包。此类具有GenerateRC()方法,该方法允许调用方为通过调用其他方法建立的数据包计算CRC。GenerateRC()调用仅在正确设置数据包头和数据后才被调用。因此,该方法在for循环中对数据包进行迭代,并以此方式计算CRC

现在我正在编写代码来读取数据包,我需要通过计算CRC来验证它们。我试图尽可能多地重用以前的“builder”类,因为我在读取数据包时,希望将其存储在内存中,最好的方法是使用“builder”类。然而,我在计算CRC时遇到了一个障碍

我正在考虑两种主要的方法,我很难权衡利弊并决定一种方法。以下是我的两个选择:

  • 在读取字节时计算CRC。我正在读取的数据被推送到一个队列中,所以我一次弹出一个字节。我将保持一个运行的“total”CRC,并在读取最后一个数据字节后立即完成计算

  • 只在读取完整数据包后计算CRC。在这种情况下,我不必保持一个运行总数,但我必须再次迭代数据包。我应该注意,这将允许我重用以前编写的代码

  • 目前,我倾向于选项1,并将“构建器”和“读取器”之间的任何常见功能移动到一个单独的头文件中。但是,我想确保第一个选项实际上是性能更好的选项,因为它确实会使我的代码更加混乱

    提前谢谢你的帮助。

    我会选择门2。通过在两端使用相同的代码,可以更简单地验证代码,还可以使用更快的CRC算法,一次处理四到八个字节。

    这似乎是一个问题