Umrechnung von Dezi zu HEX und Kontrolle

Gast #5189987
Lesenswert?

Hallo
Bitte nicht gleich erschlagen für die x-Nachfrage zu dem Thema. Habe im 
Netz gesucht und einiges gefunden. Leider sind teilweise die Links tot.
Zum Problem (alles in C)

0x30 bis 0x39 sind die Zahlen 0 bis 9
0x41 bis 0x46 sind A bis F

Zur Ansteuerung eines Graphigdisplays muss ich den Wert von 0x00 bis 
0xFF übertragen (bis zu 3 mal). Zur Eingabe der Werte kann ich nur 0 bis 
255 nutzen.
Wie kann ich die Werte in C umrechnen und gleizeitig die Eingabewerte 
kontrollieren (Begrenzung der Hexzahlen)?

LG Paul
Gast #5190000
Lesenswert?

Was möchtest du denn umrechnen? Eine Dezimalzahl in einen Hex Wert? Wenn 
du char als Datentypp verwendest gibt es nichts umzurechnen. Das ist 
beides Mal das gleiche in einer anderen Schreibweise. Oder brauchst du 
die hex Zahlen als Zeichenkette? Was meinst du mit Begrenzung der 
Hexzahlen? Eine Sättigunng dr Zahlen?
Gast #5190002
Lesenswert?

Hallo Dirk
ich möchte nicht den Wert auf dem Display ausgeben. Das mit itoa kenne 
ich. Möchte den Wert übertragen um die Helligkeit einzustellen. Danach 
erfolgt erst die Ausgeb eines Textes.
Gleizeitig möchte ich auf die korrekte Eingabe achten und wenn nötig 
begrenzen.
Beispiel:
Eingabe ist 255 übertrage FF
Eingabe ist 256 übertrage FF (Kontrolle eingabe Wert)
Eingabe ist 378 übertrage FF (Kontrolle eingabe Wert)

paul
Gast #5190049
Lesenswert?

Tut mir leid. Ich verstehe echt nicht, was du vorhast. Du willst 
wirklich den String "FF" übertragen? Falls ja, da hat Dirk dir doch 
schon eine Antwort gegeben: sprintf oder Bitoperationen (die Zuordnung 
hast du ja schon in deiner Frage stehen).
Gast #5190062
Lesenswert?

Mmhhh, wie kommst du darauf, dass 0x30 der Zahl 0 entspricht? 0x30 
entspricht einer dezimalen 48. Du meinst das ASCII Zeichen '0'.

Also nochmal aufräumen: was möchtest du genau tun? Zeichen darstellen, 
Steuerzeichen senden? Zeichen sind vom 8 Bit Typ char. Damit gibt es 
keinen Überlauf. ;-)
Moderator Persönliche Seite #5196072
Lesenswert?

Paul schrieb:
> Die Begrenzung ist klar und wie kann ich vorher die Umrechnung von Dezi
> auf Hex machen?

Du musst überhaupt nichts umrechnen.

Das Zeichen 'A' kann hexadezimal 0x41, 65 dezimal oder 1000001 binär 
geschrieben werden. Das sind aber nur Schreibweisen für den Menschen. 
Gespeichert wird der Wert im µC nämlich immer gleich.

An das Graphikdisplay musst Du diesen internen Wert schicken, dabei ist 
es egal, wie Du das schreibst, z.B.
1
send_character ('A');
2
send_character (0x41);
3
send_character (65);
4
send_character (0b1000001);

Das Resultat ist immer dasselbe: Es wird das Zeichen 'A' übertragen.

P.S.
Dass da im Handbuch des Displays etwas von Hex-Werten steht, ist für nur 
Dich  als Leser relevant. Damit Du die Zahlenbereiche auch verstehst.

Es wäre zwar theoretisch denkbar, dass tatsächlich Hex-Zeichenketten 
übertragen werden müssen, also zunächst das Zeichen '4' und dann '1' 
(also 2 Bytes statt einem!) für 0x41, aber das ist höchst 
unwahrscheinlich. Warum sollte man die Kommunikationsschnittstelle bei 
einem Graphikdisplay derart aufblähen, dass für den Menschen(!) lesbare 
Zeichen übertragen werden müssen? Diese müssten ja auf dem µC erst in 
Zeichenketten umgestaltet werden und anschließend auf dem 
Graphiksdisplay wieder zurückgerechnet werden. Das wäre nicht nur ein 
unnötiger, sondern auch komplett unnützer Aufwand. Dabei verdoppelt sich 
nicht nur der nötige Datenstrom, auch die Rechenleistung wäre auf beiden 
Seiten höher. Desweiteren ist es kompletter Unsinn, sich bei einer 
Kommunikation nur auf die Zeichen 0-9A-F zu beschränken. Hier werden 
komplette Bytes verschickt und nicht nur 16 verschiedene Werte, für die 
eine 4-Bit-Übertragung ausgereicht hätte.

Man kann daher allein durch logische Überlegungen darauf schließen, dass 
Du auf dem falschen Dampfer bist. Dabei brauche ich den Typ Deines 
Displays gar nicht zu kennen.
Gast #5196113
Lesenswert?

Paul schrieb:
>Die Begrenzung ist klar und wie kann ich vorher die Umrechnung von Dezi
>auf Hex machen?

Du möchtest das eine Dezimalzahl auf dem Display in Hex
dargestellt wird?

>Eingabe ist 255 übertrage FF
>Eingabe ist 256 übertrage FF (Kontrolle eingabe Wert)
>Eingabe ist 378 übertrage FF (Kontrolle eingabe Wert)

Eine Dezimalzahl größer als 255 passt in ein Byte nicht
mehr rein.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren