分组CRC计算方法

时间:2013-10-01 03:44:22

标签: c++ performance crc

我正在编写一个读取传入的串行数据包的类。数据包使用标头,一些数据进行布局,然后是两字节CRC。

我还编写了一个可以构建要发送的数据包的类。该类具有GenerateCRC()方法,该方法允许调用者计算通过调用其他方法构建的数据包的CRC。只有在正确设置数据包标头和数据后,才会调用GenerateCRC()调用。因此,此方法在for循环中迭代数据包并以这种方式计算CRC。

既然我正在编写代码来读取数据包,我需要通过计算CRC来验证它们。我正在尝试尽可能多地重用之前的“构建器”类,因为当我在数据包中读取时,我想将其存储在内存中,最好的方法是使用“构建器”类。但是,我对CRC的计算遇到了麻烦。

我正在考虑两种主要方法,我在权衡利弊和决定方法时遇到困难。以下是我的两个选择:

  1. 在读取字节时计算CRC。我正在读入的数据被推送到队列中,因此我一次一个地弹出字节。我会保持一个正在运行的“总”CRC,并在读入最后一个数据字节后立即完成计算。

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

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

    提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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