Bits falsch gesetzt, crc Prüfsumme immer flasch

Ich denke nicht, das am type cast lag.

Wenn du 0xff & 0x40 machst, bekommst du 0x40 und nicht 0x01. Dein test sollte gehen wenn du auf ungleich 0 testest:

 bool doinvert = (0 !=  (data & ...