Programmieren - alles kontrollieren 4.940 Themen, 20.676 Beiträge

Verstehe nicht wie diese C Berechnung funktioniert

Nobody666 / 3 Antworten / Flachansicht Nickles

Hallo zusammen,


habe anbei einen kleinen Ausschnitt aus einem C-Programm, welches mir die das Datum in Minuten ab dem 01.01.1996 darsstellt in 3 Byte und hexadezimaler Form. Kann mir bitte jemand erklären, wo was passiert??


Mfg


Nobody

bei Antwort benachrichtigen
Andreas42 Nobody666 „Verstehe nicht wie diese C Berechnung funktioniert“
Optionen

Hi!

Hm, gib' beim nächsten Mal doch bitte mit an, um welchen Compiler es geht, dass macht die Sache einfacher.

Ich bin ja nun kein C/C++-Spezialist, aber das war ja auch nicht das Thema. ;-)

Also Google hat auf der Suche nach time_t Hinweise ausgespuckt, dass die in Unix eine Variable ist, die die Systemzeit in Sekunden seit einem Referenzdatum enthält (man muss die vergangen Sekunden halt ab einem fixen Zeitpunkt zählen).

Ijn deinem Programm-Code ist time_t allerdings ein Variablen-Typ. (Ich hab' nicht weiter gesucht, ich denke das reicht für das weitere.)

Ich vermute, dass ist ein Typ, der genau den Wertebereich abdeckt, den die Unix-Variable time_t benötigt - also ein datentyp der Zeiten hällt.

Zudem glaube ich, dass in deinem beispiel die geschweiften Klammern fehlen, die den Funktionskörper umschliessen.

OK, dein Beispiel zeigt die Funktion time, die ein Parameter erwartet: t_info (Datentyp fehlt, ist aber warscheinlich time_t).

Zuerst wird der übergebene Wert "normiert". dazu wird ein konstanter Wert abgezogen, der irgendwo als Define-Konstante C_DATE_OFFSET_96_70 hinterlegt wurde. Damit wird der übergebene Wert vom Bezugsdatum des Unix-Zeitformates auf den 01.01.1996 umgerechnet (das hast du ja als Referenzdatum angegeben).

Was

_strtime( zeitpfr );
_strdate( datumpfr );

für eine Bedeutung hat, hab' ich nicht nachgeschlagen. Ich denke, das hat hier keine Bedeutung.

Danach wird das Ergebnis, dass Sekundenbasiert ist, in Minuten umgerechnet. Enthält also die Minuten, die seit dem 01.01.1996 vergangen sind.

Der Typ time_t scheint intern drei bytes gross zu sein. Diese drei bytes werden nun addiert. Dabei wird immer das unterste Byte von t_info_temp in zeit_temp kopiert und dann auf zeit_summe addiert. Danach wird t_info_temp um 8 Bits nach rechts geschoben, was einer Division um 256 entspricht. Dadurch wird das nächstehöhere Byte jeweils in das kleinere Geschoben.

Wozu dass alles gut ist, kann ich dir aber auch nicht sagen.

Ich hoffe, das hilft dir weiter.

Bis denn
Andreas

Hier steht was ueber mein altes Hard- und Softwaregedoens.
bei Antwort benachrichtigen