Hallo,
ich möchte eine Zeitangabe mit absolut minimalsten Platzbedarf speichern können.
Die Notierung ist YYYYMMDDHHMMSS.
Folgende Datentypen hab ich angeschaut:
std::string -> 40 byte
time_t -> 8 byte
QString -> 8 byte
QDateTime -> 8 byte
noch kleiner durch eigene Struktur:
struct zeit // -> 7byte
{
short Jahr;
char Monat;
char Tag;
char Stunde;
char Minute;
char Sekunde;
}
Man könnte das Jahr auch noch als char speichern und müsste dann den Wert 0 als zb Jahr 2000 interpretieren. Bei der Nutzung muss man dann eben immer + 2000 rechnen. So kann man Jahr 1872(2000-128) bis 2127 (2000+127) abdecken das sollte für die Lebenszeit reichen.
struct zeit // -> 6 byte
{
char Jahr; // +2000 in Anwendung rechnen
char Monat;
char Tag;
char Stunde;
char Minute;
char Sekunde;
}
Somit hab ich bis hier auf 6 byte reduziert.
Jetzt meine Frage geht es noch weniger?
Denn im Prinzip steht ja -128 bis +127 bzw unsigned 0 bis 255 zur Verfügung. Die benötigten Spannen sind aber meißt noch viel weniger:
Monat 1-12
Tag 1-31
Stunde 0-23
Minute 0-59
Sekunde 0-59
Kann man durch irgendwelche Tricks die Daten in noch weniger als 6 byte unterbringen ?
Gibt es Datentypen die noch kleiner sind als char also unter 1 byte bzw unter 8 bit ?
Grüße
ps: Ich kenne das Beispiel von std::vector<bool> womit es ja möglich ist 8 bool Werte in nur 1 Byte zu packen da für ein bool nur ein bit benötigt wird.
ich möchte eine Zeitangabe mit absolut minimalsten Platzbedarf speichern können.
Die Notierung ist YYYYMMDDHHMMSS.
Folgende Datentypen hab ich angeschaut:
std::string -> 40 byte
time_t -> 8 byte
QString -> 8 byte
QDateTime -> 8 byte
noch kleiner durch eigene Struktur:
struct zeit // -> 7byte
{
short Jahr;
char Monat;
char Tag;
char Stunde;
char Minute;
char Sekunde;
}
Man könnte das Jahr auch noch als char speichern und müsste dann den Wert 0 als zb Jahr 2000 interpretieren. Bei der Nutzung muss man dann eben immer + 2000 rechnen. So kann man Jahr 1872(2000-128) bis 2127 (2000+127) abdecken das sollte für die Lebenszeit reichen.
struct zeit // -> 6 byte
{
char Jahr; // +2000 in Anwendung rechnen
char Monat;
char Tag;
char Stunde;
char Minute;
char Sekunde;
}
Somit hab ich bis hier auf 6 byte reduziert.
Jetzt meine Frage geht es noch weniger?
Denn im Prinzip steht ja -128 bis +127 bzw unsigned 0 bis 255 zur Verfügung. Die benötigten Spannen sind aber meißt noch viel weniger:
Monat 1-12
Tag 1-31
Stunde 0-23
Minute 0-59
Sekunde 0-59
Kann man durch irgendwelche Tricks die Daten in noch weniger als 6 byte unterbringen ?
Gibt es Datentypen die noch kleiner sind als char also unter 1 byte bzw unter 8 bit ?
Grüße
ps: Ich kenne das Beispiel von std::vector<bool> womit es ja möglich ist 8 bool Werte in nur 1 Byte zu packen da für ein bool nur ein bit benötigt wird.