Datentyp im struct ändert sich?

Hallo zusammen,

ich hab hier ein Problem und zwar lade einen struct der verschiedene Var's enthält aus dem EEPROM.
Wenn die Variable Configflag nicht den Wert 0xaa lade ich eine def. Config. Sobald ich die Configflag
verändere bekomme ich mit serial.print ganz dubiose Ausgaben.

So richtig kann ich mir nicht erklären was ich da falsch mache. Vielleicht kann mir jemand auf die Sprünge
helfen.
Ich hänge mal das Programm und die BS-Ausgabe an.

Danke vorab und Gruß
Berniebaer

#include <EEPROM.h>

struct  ConfigValues {
  char ConfigFlag;
  char LDRTheshold;
  double GeoLongDegree;
  double GeoLongMinute;
  double GeoLatDegree;
  double GeoLatMinute;
  double TwilightAngle;
};

ConfigValues Config;
ConfigValues ConfRead;

void setup() {
 Serial.begin(9600);
  
  // put your setup code here, to run once:
 EEPROM.get(0, Config);
 if (Config.ConfigFlag != 0xAA) { 
    Serial.println("Load default Config");
    // empty Config load, set default Config
    Config.ConfigFlag = 0x55;          
    Config.LDRTheshold = 50;
    Config.GeoLongDegree = 6.0;
    Config.GeoLongMinute = 0.5;
    Config.GeoLatDegree = 50.0;
    Config.GeoLatMinute = 46.0;
    Config.TwilightAngle = 8.3333333;
 }
 Serial.println(Config.ConfigFlag, HEX);
 Config.ConfigFlag = 0xaa;
 Serial.println(Config.ConfigFlag, HEX);
 EEPROM.put(0,Config);
 Serial.println(Config.ConfigFlag, HEX);
 EEPROM.get(0, ConfRead);
 Serial.println(ConfRead.ConfigFlag, HEX);
}

und hier die Ausgabe vom Serial-Monitor

Load default Config
55
FFFFFFAA
FFFFFFAA
FFFFFFAA

Dein char ist Vorzeichen behaftet.

Bei der Parameterübergabe an Print wird dieses "Zeichen" auf 32 Bit vorzeichenbehaftet erweitert.
Erst ein impliziter (int) Cast und dann noch ein expliziter (long) Cast hinterher.
Durch dein HEX dann Vorzeichen los dargestellt.

Klarer:
char a = 0x55; // ist positiv
char b = 0xaa; // ist negativ

Wenn du es genauer möchtest:
Schaue dir die konkrete print Implementierung an.

Abhilfe:

Serial.println((byte)ConfRead.ConfigFlag, HEX);

Datentyp im struct ändert sich?

Nein!

Die Präsentation, ist nicht die von dir gewünschte.

Tipp:
Sei konkret, sage dem Kompiler, was du wünscht, dann tut er das auch.

Für Zahlenwerte sollte statt char ein besserer Datentyp verwendet werden, z.B. uint8_t.

Pos. / Neg.! Casting. Das is es.

Da hatte ich ein Brett vorm Kopf.
Kaum macht man's richtig schon funktioniert es.

Danke & Gruß,
Berniebaer