2017-03-06 6 views
-4

Ich speichere Werte der Zeit als lange auf einem Arduino. Zeiten vor 10 Uhr haben jedoch führende 0, z. 9.30 Uhr wäre 093000.Keep führende Nullen

Ich bin mir bewusst, dass dies die Zeiten als Oktalwerte speichert, aber ich möchte diese als Dezimalzahl beibehalten, wie ich dies mit anderen Zeiten vergleichen und in der Lage sein 24 Stunden hinzuzufügen, durch Hinzufügen 240000 in diesem Format, wenn die Zeit 0 vergeht.

Ich habe Lösungen zu ähnlichen Problemen gesehen, aber die Lösungen helfen nur beim Drucken des Wertes, während ich in der Lage sein möchte, den Wert hinzuzufügen.

+0

Warum benötigen Sie die führende Null für die Addition? (Auch was lässt Sie glauben, dass es nicht gespeichert wird?) – UnholySheep

+2

Für die Arbeit mit Zeiten, versuchen Sie mal 'time.h'. Führende Nullen sind nur relevant, wenn * die Daten angezeigt werden - dies hängt davon ab, wie Sie die Ausgabe formatieren, nicht die Daten – Toby

+0

Führende Nullen haben keinen Einfluss auf den Wert einer Zahl (außer der Syntax für Oktalnotation in 'C' zB '010 == 8'). Warum interessiert es dich, 0 zu führen, wenn du den Wert irgendwo nicht druckst? – Kevin

Antwort

0

Die führende Null = oktal ist nur eine Sache im C-Quellcode. Wenn Sie

long aTime = 073000; 

schreiben wird die Zahl in Oktal dargestellt erhalten, indem 073000 Die einfache Abhilfe ist die führende Null zu verzichten.

long aTime = 73000; 

Sie setzen es nur zurück, wenn Sie es als String formatiert werden:

printf("%06ld", aTime); 

Die Formatbezeichner %06ld Aber Sie 6.

fügt tatsächlich don führende Nullen bis zur Feldbreite von Willst du das nicht, willst du mit einem Unix time_t deine Zeiten speichern zB

time_t aTime = now(); 

Und für die Anzeige der Formatierung der Arduino has a library die verschiedenen Komponenten zu bekommen.