Доброго времени суток. Прошу помощи, ибо совсем запутался.
Суть такова. Есть строка, получаемая с контроллера. Выглядит примерно так:
unsigned char in_buffer[120] = "44415441FFFF000001029000009000009000009000009000900000900000900000900000900090000090000090000090000090000000000000000075";
Задача: каждые два символа этой строки представляют один байт. Нужно ее расчленить на эти самые пары символов, потом получить из них соответствующие байты и вычислить контрольную сумму, которая получается как сумма всех байт, кроме последнего, инвертированная и плюс 1. Делаю так:
void isCorrectCRC(unsigned char * in_buffer)
{
// Check the CRC for correctness
int i;
unsigned char temp_buffer[2];
int scan_result = 0;
unsigned char crc = 0;
unsigned char temp_crc = 0;
for (i = 0; i < 59; i++)
{
temp_buffer[0] = in_buffer[2 * i];
temp_buffer[1] = in_buffer[2 * i + 1];
scan_result = sscanf(temp_buffer, "%2X", &temp_crc);
crc += temp_crc;
printf("%d\t%d\n", temp_crc, crc);
}
crc = ~crc + 1;
printf("%d\n", crc);
printf("done\n");
}
Версия функции, естественно, не окончательная. Но вот беда: результат получается неправильный. Прогон под отладчиком показывает, что внутри цикла переменная crc почему-то обнуляется! Что я делаю не так?
PS: последние два символа — это и есть тот самый байт контрольной суммы, который нужно получить.