Hallo,
ich möchte eine Zahl kmh die in Hex vorliegt in ascii´s aufsplitten. ich
kann meinem Display nur ascii senden. Nun möchte ich die hex Zahl in
Einer, Zehner und Hunderter ausplitten und in jeweils ein ascii
unwandeln um es dann zum Display zu schicken. Ich benutze ACR GCC. Hat
jemand einen Tip wie man sowas lösen könnte?
Gruss
Oli
noch ein Nachtrag: mein Display zeigt nur die jewilligen Stellen in
ascii an. Soll heissen: 0x30 ist eine 0 , 0x31 ist eine 1 u.s.w.! Das
heißt, dass wenn ein 0x39 erreicht ist ein übertrag auf die Zehner ascii
Stelle kommen muss.
oli
Die Schwierigkeit ist ja, dass schon das Problem nicht richtig
beschrieben wurde. Und eine Lösung fällt selten besser aus als die
Erfassung des Problems.
Du wirst den Wert kaum „hex“ vorliegen haben, sondern läßt ihn Dir
vermutlich z.Zt. bloß hex anzeigen, z.B. im Debugger. Er wird binär
vorliegen (oder in BCD, z.B. von einem Messinstrument, aber da mir das
unwahrscheinlich scheint, lasse ich das außen vor), z.B. als 16- oder
8-Bit-Variable.
Also hättest Du nun das Quell-Zahlenformat zu klären und dann nach einer
Umwandlungsfunktion zu suchen, die Dir das ins Zielformat wandelt. Das
Zielformat hast Du auch nur recht krude beschrieben; es wird wohl ein
C-String sein.
Wenn das geklärt ist, wirst Du vermultlich bei utoa() oder einer anderen
Funktion der itoa()-Familie landen oder (wenn Programm-Speicherplatz
keine Rolle spielt) bei sprintf.
Danke schon mal für die Antworten. Also es ist ein Opel TID. Dem kann
ich per Can , Ascii senden. Jede Stelle auf dem Display ist ein
Zeichen(ascii).
Die Kmh sind in einer Can Nachricht und werden als Hex verschlüsselt.
Ich lese diese Hex aus und will sie dem Dispaly in einer Can Nachricht
schicken. Wie ich eine Hex in ein int wandele, könnte ich noch
hinbekommen. Nur wie splite ich die Hex so, dass z.b. bei hex 0x32, was
ja 50 Kmh ist, die 5 als ascii 0x35 und die 0 als 0x30 habe?
Ich hoffe es war verständlicher?
Oli
oli schrieb:
>...> Ich hoffe es war verständlicher?
Nein eigentlich nicht! Und Leute, die dir evt. helfen wollen, wissen
jetzt nicht so richtig, ob sie dir nun die Antwort auf deine Frage geben
sollen, (was dir vermutlich nicht helfen wird, da die Frage
möglicherweise auf Grund falscher Annahmen deinerseits, unpräzise
gestellt ist), oder ob sie dir eine Antwort auf eine von dir nicht
gestellte Frage geben sollen, die dir aber möglicherweise weiterhelfen
würde.
> Danke schon mal für die Antworten. Also es ist ein Opel TID. Dem kann> ich per Can , Ascii senden. Jede Stelle auf dem Display ist ein> Zeichen(ascii).> Die Kmh sind in einer Can Nachricht und werden als Hex verschlüsselt.
Ist das wirklich so? Kommen da wirklich 4 Bytes in ASCII: "0", "x", "3",
"5" an? Oder sind es gar nur zwei Bytes in ASCII: "3", "5"? Und falls
ja, gibt es ein Trennzeichen?
Oder glaubst du nur, dass da eine Hex-Zahl in ASCII-Verschlüsselung
ankommt, weil es dir irgend ein Programm so anzeigt und tatsächlich sind
das aber nur einzelne Bytes, die man sowohl als Binär-, Oktal-, Dezimal-
oder Hexadezimal-Zahl interpretieren kann?
> Ich lese diese Hex aus
Wie, mit was, in was für eine Variable?
> und will sie dem Dispaly in einer Can Nachricht> schicken. Wie ich eine Hex in ein int wandele, könnte ich noch> hinbekommen.
Wie würdest du das machen?
> Nur wie splite ich die Hex so, dass z.b. bei hex 0x32, was> ja 50 Kmh ist, die 5 als ascii 0x35 und die 0 als 0x30 habe?
Wenn du die "Hex-Zahl", bereits in eine Integer-Zahl umgewandelt hast,
dann stellt sich doch die Frage gar nicht mehr, wie du eine "Hex-Zahl"
splitten kannst, denn dann hast du ja gar keine "Hex-Zahl" mehr sondern
ein Integer-Zahl und die Frage würde lauten: Wie splitte ich eine
Integer-Zahl in ihre dezimalen Bestandteile auf. Also z.B. wie finde ich
heraus, dass in der Zahl "12" einmal die "1" und einmal die "2" drin
ist?
@Albrecht
genau die Frage stelle ich mir ja! wie kann ich die Hex oder Integer bei
z.b. 55 in "5" und "5" zerlegen? Also quasi in einer,zehner und
Hunderter.
Die Kmh werden ursprünglich nicht auf dem Display angezeigt. Nur ich
will sie mir da anzeigen lassen. Das Display verlangt aber pro Stelle
ein ascii.
Ich sende dieses ascii als z.b. 0x65 als A. Es geht also darum die 55 in
einer und zehner hunderter zu zerlegen und als jeweils ascii zu haben.
oli
oli schrieb:
> @Albrecht> genau die Frage stelle ich mir ja! wie kann ich die Hex oder Integer bei> z.b. 55 in "5" und "5" zerlegen? Also quasi in einer,zehner und> Hunderter.
Na so schwer ist das nicht.
Du hast das in der Grundschule schon gelernt.
Eine Mutter hat 37 Äpfel und 10 Kinder.
Wieviele Äpfel kriegt jedes Kind, wenn alle gleich viele kriegen?
Genau 3
Wieviele Äpfel bleiben der Mutter?
Genau 7
Hmm. 37 .... 3 und 7, 37 ..... 3 und 7
Ob es da einen Zusammenhang gibt? Ob das wohl so ist, weil
37 = 3*10 + 7 ist?
int i = 37
int j = i / 10; // j ist 3
int k = i % 10; // k ist 7
http://www.mikrocontroller.net/articles/FAQ#Wie_kann_ich_Zahlen_auf_LCD.2FUART_ausgeben.3F