Задача повышения CRC: разные результаты с одинаковыми параметрами - PullRequest
0 голосов
/ 02 сентября 2011

Я впервые использую 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

Ответы [ 2 ]

7 голосов
/ 02 сентября 2011

Согласно руководству, checksum() возвращает "контрольную сумму CRC данных, переданных до сих пор".Итак, вторая контрольная сумма является контрольной суммой объединения данных1 с самим собой и, таким образом, естественно отличается от контрольной суммы данных1.

6 голосов
/ 02 сентября 2011

Я брошу случайный камень ... Вы не сбрасываете состояние result1, поэтому контрольная сумма, которую вы вычисляете во второй раз, имеет вид "Это тестовая строка. Это тестовая строка".Мммм ... Да ... Там должно быть crc_32_type.reset().

...