КОНТЕКСТ
Я использую код, написанный для работы с модулем GPS, который подключается к Arduino через последовательную связь. Модуль начинает каждый пакет с заголовка (0xb5, 0x62), продолжает запрашиваемую информацию и заканчивается байтами контрольной суммы, CK_A и CK_B. Я не понимаю код, который вычисляет эту контрольную сумму. Подробнее об алгоритме контрольной суммы (8-битный алгоритм Флетчера) в протоколе модуля (https://www.u -blox.com / sites / default / files / products / documents / u-blox7-V14_ReceiverDescriptionProtocolSpec_% 28GPS.G7- SW-12001% 29_Public.pdf ), стр. 74 (87 с указателем).
БОЛЬШЕ ИНФОРМАЦИИ
Просто хотел понять код, он отлично работает. В протоколе UBX, как я уже упоминал, есть также фрагмент кода, который объясняет, как он работает (не записывается в c ++)
struct NAV_POSLLH {
//Here goes the struct
};
NAV_POSLLH posllh;
void calcChecksum(unsigned char* CK) {
memset(CK, 0, 2);
for (int i = 0; i < (int)sizeof(NAV_POSLLH); i++) {
CK[0] += ((unsigned char*)(&posllh))[i];
CK[1] += CK[0];
}
}