增强CRC CCITT输出值不同

时间:2013-12-05 15:23:42

标签: c++ arrays boost crc

我正在使用boost 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 );

稍后变量incoming的Ofc将通过输入定义。

解决方案:

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

1 个答案:

答案 0 :(得分:1)

sizeof(data)是指向unsigned char类型的指针的大小。 因此,该行总是等于 4 (在x86中,指针大小为4个字节,unsigned char为1):

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

data_len = 4/1;