Ett alternativ vore då kanske att köra nibblevis XOR på inkomna byte. Jämför sedan de två nibblarna med asciihexvärdet...
Inte säkert att det blir effektivare, men det kanske är värt att testa... (Ha överseende att jag kanske programmerat fel i huvudet, men jag hoppas att själva idéen kommer fram ändå)
Kod: Markera allt
//Datainläsningen, typ nått sånt här...:
while(incomming_data)
{
indata = getFromUART();
xorL = (indata & 0x0F) ^ xorL;
xorH = (indata >> 4) ^ xorH;
}
//Checksumverifiering:
bool verifyChecksum(char xorL, char xorH, char* hexCS)
{
return
(
(*(hexCS) == ((xorL < 0x0A) ? (xorL+'0') : (xorL+'A')) )
&&
(*(hexCS+1) == ((xorH < 0x0A) ? (xorH+'0') : (xorH+'A')) )
);
}
