【问题标题】:Boost CRC problem: different results with the same parametersBoost CRC问题:相同参数的不同结果
【发布时间】:2011-09-02 08:12:26
【问题描述】:

我是第一次使用 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;
}

这是输出:

result1: 2DB69898
result1: E29C91
result2: 2DB69898

【问题讨论】:

    标签: c++ boost crc


    【解决方案1】:

    根据手册,checksum()返回“到目前为止传入的数据的CRC校验和”。所以,第二个校验和是data1与自身串联的校验和,自然不同于data1的校验和。

    【讨论】:

      【解决方案2】:

      我会扔一个随机的石头......你没有重置result1的状态,所以你第二次计算的校验和是“这是一个测试字符串这是一个测试字符串”。嗯……是的……应该有crc_32_type.reset()

      【讨论】:

        猜你喜欢
        • 2013-05-29
        • 1970-01-01
        • 2014-03-24
        • 2021-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多