Hallo, Ich möchte gerne den wert einer Variable in HEX wandeln. u8 stunde_dez; // 0-59 u8stunde_hex; Mit sprintf wäre ja eine Möglichkeit aber das nimmt mir ja zu viel Programm Speicher. Gibst denn noch eine andere Möglichkeit den Wert in HEX zu wandeln mfg
Der Wert ist schon hexadezimal. Oder binär, je nachdem wie man es betrachtet. Was genau willst Du machen? Den Wert irgendwo anzeigen?
Dem Controller ist das egal welches Zahlenformat du hast, er kennt nur binär. Alles andere macht der Compiler.
:
Bearbeitet durch User
andre schrieb: > u8 stunde_dez; // 0-59 > > u8stunde_hex; Wenn du schreibst: stunde_dez = 59; stunde_hex = 0x3B; dann enthalten die beiden Variablen exakt den gleichen Inhalt.
ich möchte eine RTC Uhr die Stunde stellen, da ist das Format nur in hex. ich zähle die variable Stunde_dez 0-23 bis ich meine Uhrzeit hab. bei der minute auch so. zB. in hex ist 0x17 in dezimal 23. wie Wandel ich nun meine Zahl in hex um
andre schrieb: > Ich möchte gerne den wert einer Variable in HEX wandeln. In welchem Format eine CPU einen Wert intern speichert, kannst Du nicht beeinflussen. Du kannst nur bestimmen, wie eine Variable als Text ausgegeben werden soll.
andre schrieb: > wie Wandel ich nun meine Zahl in hex um Wer sucht, der wird finden :-) http://stackoverflow.com/questions/16928517/converting-a-decimal-to-a-hexadecimal-number Nur ein Beispiel...
andre schrieb: > wie Wandel ich nun meine Zahl in hex um Garnicht weil nicht nötig, die übertragen Daten sind sowieso binär. Hugo schrieb: > Nur ein Beispiel... Hier wird aber aus der Variable ein String gemacht...
:
Bearbeitet durch User
andre schrieb: > ich möchte eine RTC Uhr die Stunde stellen, da ist das Format nur in > hex. Vorsicht! Die meisten RTCs wollen nicht Hex, sondern BCD. Und das ist was ganz anderes! > ich zähle die variable Stunde_dez 0-23 bis ich meine Uhrzeit hab. bei > der minute auch so. > zB. in hex ist 0x17 in dezimal 23. Beispiel: 23 Uhr: DEZ 23 HEX 0x17 BCD 0x23 Nenne mal den RTC-Typ. Dann wetten wir, ob Hex oder BCD. Ich tippe stark darauf, dass die RTC 0x23 und nicht(!) 0x17 für die Stunde 23 haben will. > wie Wandel ich nun meine Zahl in hex um Falsche Frage. Jede Zahl im Rechner ist binär abgelegt, Du kannst sie in dezimal oder Hex auslesen oder beschreiben. Da wird nix Konvertiert. Was Du willst: Dez -> BCD. Da muss man tatsächlich etwas konvertieren. Dafür reichen 2 Makros:
1 | #define INT_TO_BCD(x) (((x) / 10) << 4) + ((x) % 10)
|
2 | #define BCD_TO_INT(x) (10 * ((x) >> 4) + ((x) & 0x0F))
|
Amateur schrieb: > Bis Du Dir sicher, dass die Uhr Hex-Zahlen verdaut und nicht > BCD's? Ja richtig ist für die internevuhr des F4
andre schrieb: > ich möchte eine RTC Uhr die Stunde stellen, da ist das Format nur in > hex. > > ich zähle die variable Stunde_dez 0-23 bis ich meine Uhrzeit hab. bei > der minute auch so. > zB. in hex ist 0x17 in dezimal 23. > > wie Wandel ich nun meine Zahl in hex um Gar nicht. Weil eine Umwandlung an der Stelle nicht nötig ist. andre schrieb: > Ja richtig > ist für die internevuhr des F4 Was auch immer ein F4 sein mag. Beschreibe Dein Problem mal vernünftig. Was ist gegeben, was soll gemacht werden?
:
Bearbeitet durch User
Mark B. schrieb: > Was auch immer ein F4 sein mag. Vermutlich ein Cortex der Serie STM32F4. Man fragt sich allerdings wie er den im Zaum halten will...
ich möchte gerne die RTC vom stm33f4 stellen. Dazu habe ich 2Taster up down 0-23 für die Stunde erstmal. wenn ich die Uhr jetztvauf 23 stelle erhalte ich als Ausgabe 15uhr. das geht RTC_TimeStructure.RTC_Hours = 0x05; RTC_TimeStructure.RTC_Minutes = 0x20; RTC_TimeStructure.RTC_Seconds = 0x00; und so gehts nicht. RTC_TimeStructure.RTC_Hours = 23; RTC_TimeStructure.RTC_Minutes = 0x20; RTC_TimeStructure.RTC_Seconds = 0x00;
Es wurde ja schon n-mal geschrieben. Es wird sich um eine Zahlendarstellung als BCD-Zahl handeln ! Und 23dez = 17hex als BCD-Zahl ist das dann 1 7. Man betrachtet jeweils nur die 4bit Nippel der Zahl im Zahlenbereich von 0 bis 9.
andre schrieb: > wenn ich die Uhr jetztvauf 23 stelle erhalte ich als Ausgabe 15uhr. Sicher 15? Nicht 17? Und was ist, wenn Du RTC_TimeStructure.RTC_Hours = 0x23; schreibst? andre schrieb: > das geht > RTC_TimeStructure.RTC_Hours = 0x05; Und da komm dann 23 Uhr raus? > RTC_TimeStructure.RTC_Minutes = 0x20; Und was sagen die Minuten? Wie gesagt, benutze das oben erwähnte Makro INT_TO_BCD, also int hours = 23; RTC_TimeStructure.RTC_Hours = INT_TO_BCD(hours); Dasselbe gilt für die Minuten und Sekunden. Dann klappt das schon.
:
Bearbeitet durch Moderator
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.