Hallo Freunde ;) Wie wandelt man am besten in "C" BCD zu ASCII?! Ich habe ein Byte von einer RTC was im BCD Format kommt & das brauche ich jetzt als ASCII?! jemand einen Vorschlag?
Jan.H schrieb: > Ich habe ein Byte von einer RTC was im BCD Format kommt & das brauche > ich jetzt als ASCII?! Mal angenommen, es sind 2 BCD-Ziffern im "wert" enthalten:
1 | char zehner = (wert>>4)&0xf+'0'; |
2 | char einer = wert &0xf+'0'; |
Auch wenn ich hier offenbar in der Minderheit bin: Ich bin der Meinung, dass in 8 Bit 2 BCD-Zahlen passen... ;-)
Öhm, BCD ist doch der Binärwert der Zahlen 0-9. 0 = 0000 1 = 0001 ... 9 = 1001 Alles was zu tun wäre ist eine Addition einer ASCII-"0" (= 48?) und deines BCD-Wertes. Achte darauf sie vorher auf gleiche Typen zu bringen sonst wird bei jeder deiner Additionen zuerst der Typ konvertiert und dann erst addiert. Das kostet CPU-Zeit und führt zu unerwünschten Nebeneffekten. Oder meinst du EBCDIC?
Detlev S. schrieb: > Öhm, > > BCD ist doch der Binärwert der Zahlen 0-9. Dann würde man es Binärwert nennen. Wenn du aber von einer RTC die Minuten als BCD Wert in einem Byte bekommst, ist die Sache sonnenklar. Das Low-Nibble enthält eine Ziffer (0-9) und das High-Nibble enthält eine Ziffer (0-9) Die Aussage: wir haben BCD-Zahlen macht nur dann Sinn, wenn beide Nibble eine Ziffer halten können. Ansonsten hat man einfach nur Binärzahlen im Wertebereich von 0 bis 9
Lothar Miller schrieb: > Auch wenn ich hier offenbar in der Minderheit bin: > Ich bin der Meinung, dass in 8 Bit 2 BCD-Zahlen passen... ;-) Das wird dann als packed BCD bezeichnet (und dürfte das sein, was die RTC hier liefert).
Lothar Miller schrieb: > Auch wenn ich hier offenbar in der Minderheit bin: > Ich bin der Meinung, dass in 8 Bit 2 BCD-Zahlen passen... ;-) Das nennt man dann typischerweise packed BCD Aber ich folge dir gern dahingehend, daß die RTC ziemlich sicher packed BCD ausgibt und dem TE beim Formulieren seiner Frage nicht so ganz klar war, daß das Adjektiv packed hier wichtig ist. XL
Rufus Τ. Firefly schrieb: > Das wird dann als packed BCD bezeichnet Ich lasse da der Einfachheit halber das packed immer weg und schließe mich der Meinung von Karlheinz an: wenn nur tatsächlich nur 1 BCD Zahl im Byte ist, dann habe ich einfach nur eine übliche Binärzahl im Bereich von 0..9. Erst wenn das obere Nibble auch verwendet wird und sich dessen Wertebereich von 0..9 bewegt, ist es eine BCD-Zahl. Insofern gilt also "BCD = packed BCD"... > (und dürfte das sein, was die RTC hier liefert) Das machen die üblichen RTC, die ich so kenne... http://electronics.stackexchange.com/questions/12606/why-do-real-time-clock-chips-use-bcd
Lothar Miller schrieb: > Das machen die üblichen RTC, die ich so kenne... Bei BCD-RTCs haben die oberen Bits oft Sonderfunktionen (12/24Mode) oder sind undefiniert. Man muß sie daher ausmaskieren. Ich nehme am liebsten RTC im 32Bit-Mode, die laufen 136 Jahre, danach muß man die Startzeit neu festlegen.
Peter Dannegger schrieb: > die laufen 136 Jahre, danach > muß man die Startzeit neu festlegen. Machst Du das selbst? Duck&weg... ...
Hannes Lux schrieb: > Peter Dannegger schrieb: >> die laufen 136 Jahre, danach >> muß man die Startzeit neu festlegen. > > Machst Du das selbst? > > Duck&weg... > > ... Wie würdest du es denn machen ?!
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.