我第一次使用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
答案 0 :(得分:7)
根据手册,checksum()
返回“到目前为止传入的数据的CRC校验和”。因此,第二个校验和是data1与其自身串联的校验和,因此自然不同于data1的校验和。
答案 1 :(得分:6)
我会抛出一个随机摇滚...你没有重置result1
的状态,所以你第二次计算的校验和是“这是一个测试字符串这是一个测试字符串”。嗯......是的......应该有crc_32_type.reset()
。