2011-09-02 104 views
0

我首次使用CRC(boost::crc_32_type),并且我注意到使用相同的参数调用process_bytes()方法两次得到不同的结果。这是正常的吗?Boost CRC问题:使用相同参数的不同结果

#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 

回答

7

根据手册,checksum()返回“到目前为止传入的数据的CRC校验和”。因此,第二个校验和是data1与其自身并置的校验和,因此与data1的校验和自然不同。

6

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

相关问题