Вот данные, которые мы получаем от модуля GNSS:
#include <stdio.h>
#include <stdlib.h>
//$GPGLL,,,,,,V,N*64
//$GaabL,,,,,,V,N*5D
char Received[] = { "Odetnij to jak mozesz$GaabL,,,,,,V,N*5D" };
int main(void)
{
int i = 0;
int b;
int c;
int super_atoi;
int wynik;
int xor = 0;
while (Received[i] != '$')
{
printf("%c", Received[i]);
i++;
}
i++;
printf("%c\n ");
while (Received[i] != '*')
{
printf("%c", Received[i]);
xor ^= Received[i];
i++;
}
printf("\n XOR = %d", xor);
printf("\n XOR w hex = %#02x ", xor);
printf("\n XOR w dec = %d ", xor);
if (Received[i] == '*')
{
i++;
b = Received[i];
printf("\n 1 znak w kodzie za * = %c", b);
i++;
c = Received[i];
printf("\n 2 znak w kodzie za * = %c", c);
}
char a[3] = { b, c };
super_atoi = atoi(a);
super_atoi = strtol(a, NULL, 16);
printf("\n ATOI = %s ", a, super_atoi);
if (xor == super_atoi)
{
printf("%c\n ");
printf("\n WORKING!");
}
else
{
printf("%c\n ");
printf("\n not working");
}
return 0;
}
Чтобы подсчитать сумму проверок каждого из нас, мы должны xorchar между "$" и "*".Моя программа для этого:
DEMO
В основном мы проверяем каждый символ, если его "$", затем xor элементы, пока мы не получим *.Однако у меня небольшая проблема ... Мне нужно проверить каждую строку данных - пакет передачи NEO-7 из [280] + символов каждый определенный период времени, который включает в себя 11 "$: и 11 *. Есть два способао проверке всего, что я могу придумать:
- Проверка каждого байта (символа), начало отсчета при появлении «$», завершение при появлении *, сравнение результатов с 2 элементами после «*».
- (больше подходит для моей программы) Получите массив [35] из модуля GPS, создайте отдельный массив, в который я включу то, что осталось от предыдущей проверки, поместите следующий пакет данных, поступающий от GPS, повторите. Не могли бы выподскажите пожалуйста что лучше? также как создавать эти решения?