增强CRC问题:使用相同参数的不同结果

Pie*_*tro 0 c++ boost crc

我第一次使用CRC(boost::crc_32_type),我注意到process_bytes()使用相同的参数调用方法两次我得到不同的结果.这是正常的吗?

#include <boost/crc.hpp>
#include <ios>              // for std::ios_base, etc.
#include <iostream>
#include <string>

using namespace std;

int main()
{
    string              data1, data2;
    boost::crc_32_type  result1, result2;

    data1 = "This is a test string";
    data2 = data1;

    result1.process_bytes(data1.c_str(), data1.length());

    cout << "result1: " << hex << uppercase << result1.checksum() << endl;

    result1.process_bytes(data1.c_str(), data1.length());

    cout << "result1: " << hex << uppercase << result1.checksum() << endl;

    result2.process_bytes(data1.c_str(), data1.length());

    cout << "result2: " << hex << uppercase << result2.checksum() << endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是输出:

result1: 2DB69898
result1: E29C91
result2: 2DB69898
Run Code Online (Sandbox Code Playgroud)

thi*_*ton 7

根据手册,checksum()返回"到目前为止传入的数据的CRC校验和".因此,第二个校验和是data1与其自身串联的校验和,因此自然不同于data1的校验和.


xan*_*tos 6

我会抛出一个随机的摇滚...你没有重置状态result1,所以你第二次计算的校验和是"这是一个测试字符串这是一个测试字符串".嗯......是的...应该有一个crc_32_type.reset().