Boost CRC CCITT输出值不同



我正在使用boosts-crc CCITT。我需要根据需要输入crc计算的值,所以数组大小会有所不同,这就是我选择动态数组的原因。但问题是,当我使用测功器阵列时,我会得到不同的结果,为什么?还是我在这里做错了什么?

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 );

sizeof(data)是指向无符号字符类型的指针大小。因此,这一行始终等于4(在x86中,指针大小为4字节,无符号字符为1):

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

data_len=4/1;

最新更新