Фон
Я пытаюсь вычислить CRC-16 / CRC2 для заданного байтового массива, используя boost crc lib.
Примечание: я в лучшем случае новичокв разработке на C ++
#include <iostream>
#include <vector>
#include <boost/crc.hpp>
namespace APP{
class CrcUtil{
public:
static uint16_t crc16(const std::vector<uint8_t> input) {
boost::crc_16_type result;
result.process_bytes(&input, input.size());
return result.checksum();
}
CrcUtil()=delete;
};
};
Я использую catch2 в качестве моей тестовой среды.Вот код для теста:
#include "catch.hpp"
#include "../include/crcUtil.h"
TEST_CASE("is crc calculation correct", "[crcUtil.h TESTS]"){
std::vector<uint8_t> bytes = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
auto expectedCRC2 = 0x3c9d;
auto actualCRC2 = APP::CrcUtil::crc16(bytes);
REQUIRE(expectedCRC2 == actualCRC2);
}
Issue
Каждый раз, когда я запускал мой тест, вычисленный CRC различался.
Первый запуск:
/.../test/crcUtilTests.cpp:10: FAILED:
REQUIRE( expectedCRC2 == actualCRC2 )
with expansion:
15517 (0x3c9d) == 63180
Второй запуск:
/.../test/crcUtilTests.cpp:10: FAILED:
REQUIRE( expectedCRC2 == actualCRC2 )
with expansion:
15517 (0x3c9d) == 33478
N-й запуск:
/.../test/crcUtilTests.cpp:10: FAILED:
REQUIRE( expectedCRC2 == actualCRC2 )
with expansion:
15517 (0x3c9d) == 47016
Вопрос
Что-то не так смой код?
Почему CRC16 отличается для одного и того же ввода?
Как можно надежно рассчитать CRC16 для данного байтового массива?