Выходные значения Boost CRC CCITT отличаются

Я использую повышение CRC CCITT.
Мне нужно как угодно ввести значения для вычисления crc, поэтому размер массива будет отличаться, поэтому я выбрал динамический массив.
Но дело в том, что при использовании dynmic массива я получаю разные результаты. Почему?
Или я что-то здесь не так делаю?

unsigned char test[] = { 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39 };
// returns 0x29B1 which is correct.
int dynsize;
std::wstring incoming ( L"313233343536373839" );
dynsize = ( incoming.size() / 2 ) + 1;
unsigned char* data = new unsigned char [dynsize];
data[0] = 0x31;
data[1] = 0x32;
data[2] = 0x33;
data[3] = 0x34;
data[4] = 0x35;
data[5] = 0x36;
data[6] = 0x37;
data[7] = 0x38;
data[8] = 0x39;
// that returns 0x5349 whis is not correct.

std::size_t const data_len = sizeof ( data ) / sizeof ( data[0] );
boost::crc_basic<16> crc_ccitt1( 0x1021 , 0xFFFF , 0 , false , false );
crc_ccitt1.process_bytes ( data , data_len );

Ofc позже по переменной incoming будет определен через ввод.

Решение:

std::size_t const data_len = sizeof ( data ) / sizeof ( data[0] ); // deleted
dynsize = ( incoming.size() / 2 );
crc_ccitt1.process_bytes ( data , dynsize );

0

Решение

sizeof (data) — это размер указателя на тип без знака.
Поэтому эта строка всегда равна 4 (в x86 размер указателя составляет 4 байта, а число без знака равно одному):

std::size_t const data_len = sizeof ( data ) / sizeof ( data[0] );

data_len = 4/1;

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector