Arduino (C): HEX Zahlen zu Dezimalzahlen convertieren?
Guten Tag, momentan habe ich das Problem, dass ich eine HEX Zahl, wie bei HTML,CSS verwendet (#FFFFFF, #00FFFF....) zu der Dezimalzahl umwandeln möchte. Habe jetzt nach 5 Stunden google nichts gefunden, und auf stackoverflow kann mir auch niemand helfen...
Hoffe ihr habt Ansätze oder direkte Code Beispiele.
Danke! :)
2 Antworten
Eine Zahl hat keine Darstellung. Eine Zahl ist eine Zahl. Was Du vermutlich hast ist eine Zeichenkette (String), welche einen HEX-String enthält, welchen Du in eine Zahl konvertieren willst.
Ach echt? 5 Stunden gegoogelt? Ich habe 10 Sekunden gegoogelt ("Arduino hex to decimal") und es kam als erster Treffer das hier: https://forum.arduino.cc/index.php?topic=105227.0
Dort steht aber ein Link zu http://www.cplusplus.com/reference/cstdlib/strtol/
Und dort gibt es ein Beispiel, welches genau das macht, was Du hast.
Warum geht das nicht? Bzw. was geht daran nicht so, wie Du es möchtest, außer, dass Du eventuell in einem ersten Schritt das "#" durch "0x" ersetzen musst?
Das wäre zu einfach. Arduino kann 0xFFFFFF nutzen. Ich möchte aber im Seriellen Monitor einfach nur FFFFFF eingeben, und diese wird konvertiert. Und in dem char, in welchem die 0xFFFFFF steht, kann ich keinen String einsetzen...
Also der Input vom seriellen Monitor kommt als Arduino String (oder kann zumindest in einen solchen konvertiert werden). Dann kannst Du einfach ein "0x" davorhängen und strtol verwenden. Ich weiß jetzt nicht, wo das Problem ist...
Ja vielleicht mal lesen. Nach 5 Stunden google hatte ich natürlich auch diese Seite gefunden. 3 Methoden waren vorhanden, eine davon war für C#, und die anderen beiden haben nicht richtig funktioniert, auch nicht nach umschreiben...
Stimmt, vielleicht solltest Du lesen :-) auf der von mir verlinkten Seite steht ganz unten ein Beispiel, wo eine MAC-Adresse umgewandelt wird. Dort steht ein Link auf die Doku der strotl Funktion und dort gibt es Beispiele - unter anderem eines, welches Deinen Fall fast verbatim behandelt (ersetze zunächst "#" durch "0x").
Wenn Deine Hex-Zahlen Farbcodierungen sind bedenke bitte, daß es nicht eine sechstellige Zahl ist hinter der Raute, sondern drei zweistellige Zahlen.
Ich kenne mich mit den Farbcodes garnicht aus. Meine Aufgabe ist es aber, im Praktikum, die HEX Color codes, in Dezimalzahlen umzuwandeln. Also auf #FFFFFF wird 16777215
Dann versuch mal herauszufinden was ein "HEX Color code" genau ist, was die Darstellung bedeutet.
Ich sag Dir nur, Dein Ergebnis ist falsch.
Du behandelst die 6 Ziffern wie eine einzige Zahl, tatsächlich sind es drei Zahlen; FF, FF und FF.
Für die Umrechnung brauchst Du (hoffentlich ;p) nicht mal einen Umrechner ...
Diese dezimale Darstellung wird aber tatsächlich häufig verwendet. Wird ein "Farbwert" als long gespeichert, dann kommt z.B. in vielen Debuggern sowas raus.
Hexadezimal, also 0..15, sind 4 Bit. Entsprechend sind 2 Hex-Zahlen 8 Bit, entsprechend einem Byte (0..255). Deshalb liest man Hex-Zahlen gewöhnlich in Doppelgruppen.
Bei einem Algorithmus fängst du mit der kleinsten Hex an und multiplizierst die folgenden Stellen jeweils mit 16, also z.B.
"3E8" ==> "3", "14", "8" ==> 8 + 16 * 14 + 16² * 3 = 1000
ah, ich will auch wenigstens ein bischen recht haben ;p ...
muß ich mir das als semi-DAU das dann so vorstellen, daß
der Hex-Wert der "long" 16777215 aus programmiertechnischer im Speicher als "00 00 00 00 00 FF FF FF" vorliegt, und man sich für die Farbdarstellung aus der 8-Byte Speicherstelle der Variable die entsprechenden Werte für die Farbkanäle einzeln als Byte da abholt wo sie liegen ?
Ich korrigiere mich sogar nochmal: Die untere Methode, welche sogar teilweise funktioniert, erreicht nicht das was ich möchte.