В приведенной ниже программе я пытаюсь передать шестнадцатеричное значение в функцию CRC16 и выполнить некоторые вычисления.Но в строке (cc = 0xff & * ptr;) вместо ANDing всего значения ptr используется только первое значение.Можно ли указать на ошибку, которую я здесь совершаю.Спасибо.
unsigned int crcValues[256];
unsigned int CRC16(unsigned int crc ,unsigned char *ptr)
{
unsigned char tmp;
unsigned char cc;
cc = 0xff & ((unsigned int)*ptr);
tmp = ((crc >> 8) ^ cc);
crc = (crc << 8) ^ crcValues[tmp & 0xff];
crc = crc & 0xffff;
return crc;
}
void CRCCorrectionCode()
{
unsigned int crc;
int i = 0;
int j;
for(int c = 0;c < 256; c++)
{
crc = 0;
j = c;
c = c << 8;
for(int j = 0;j < 8;j++){
if((crc ^ c) & 0x8000)
crc = (crc << 1) ^ poly;
else
crc = crc << 1;
c = c << 1;
}
c = j;
crcValues[i] = crc;
i++;
}
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
CRCCorrectionCode();
QString tmpString = QString("0x%1").arg(254, 2, 16, QLatin1Char('0'));;
int crc = 0;
CRC16(crc,(unsigned char* )tmpString.toLatin1().data());
}