Мне нужна помощь в понимании следующего бита кода и где я могу ошибиться. Использование MPLABАнализ массива, поиск значений и использование контрольной суммы
Это начало функции, я получаю эту часть
char validateNemaSentence(char *pSentence)
{
char chkSumToken[3];
unsigned char calculatedChecksum = 0;
char errorCode = NOERROR;
if(*pSentence != '$')
return ERROR;
pSentence++;
Следующий участок, где у меня есть проблемы
while (*pSentence != '\0' && *pSentence != '*')
{
calculatedChecksum ^= *pSentence;
pSentence++;
}
Эта часть функции приращения адреса pSentence , который вводится функцией как массив. этот массив фактически состоит из строки пользовательских входов, которая должна быть «проанализирована» и оценена с помощью контрольной суммы. Этот цикл while проходит через каждый элемент массива, если он не видит NULL или ASTERIX, а Xors - значение. Поэтому, если бы я сказал, что элемент [1] и элемент [2] pSentence были произнесены «A» и «B» (поэтому цикл while, петли дважды, а checkSum - это Xor значение «A»), тогда do i Xor их значения ascii, чтобы получить значение для контрольной суммы? Так работает эта часть функции?
Так ASCII является 0x41 В ASCII является 0x42
calculatedChecksum ^= *pSentence (which is A)
= 0100 0001
, а затем
calculatedChecksum ^= *Sentence (which is B)
0100 0001 (Текущее значение calcChecksum)
0100 0010 (ASCII of B)
= 0000 0011
Это правильно?
Теперь эта последняя функция - вот где большая часть моей проблемы. Мой код всегда возвращает ERROR, и я не уверен, как правильно назначить контрольную сумму для функций, потому что если я изменил strcmp ниже на «== 0», тогда я могу фактически отправить pSentence и оценить его, но тогда моя контрольная сумма не будет работать должным образом
if(*pSentence == '*')
{
sprintf(chkSumToken, "%2x", calculatedChecksum);
pSentence++;
if(strcmp(pSentence,chkSumToken) !=0) errorCode = ERROR;
}