2011-09-02 101 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()

相關問題