char HEX-Problem, warum 16 Bit breit

ich habe ja char = 8 Bit deklariert, woher kommen dann die oberen 8 Bit FFxx ? also ein word ?

Empfangszeichenkette[n] ist ein char, da hast du Recht.
0xFE ist aber einint

Der Vergleich == wird daher mit zwei int gemacht.

char c = 0xFE; ist vorzeichenbehaftet. Also -2 oder als int gesehen das gleiche wie 0xFFFE;
const int i = 0xFE; ist natürlich 254, und damit ungleich -2

Wenn es dich tröstet: du bist nicht der einzige, dem das erst beim Testen auffällt.