Arduino (C): HEX Zahlen zu Dezimalzahlen convertieren?

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



Gomze 
Fragesteller
 01.02.2017, 08:41

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...

0
ohwehohach  01.02.2017, 08:44
@Gomze

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").

0
Gomze 
Fragesteller
 01.02.2017, 08:43

Ich korrigiere mich sogar nochmal: Die untere Methode, welche sogar teilweise funktioniert, erreicht nicht das was ich möchte.

0
ohwehohach  01.02.2017, 08:45
@Gomze

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?

0
Gomze 
Fragesteller
 01.02.2017, 08:53
@ohwehohach

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...

0
ohwehohach  01.02.2017, 09:03
@Gomze

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...

0

Wenn Deine Hex-Zahlen Farbcodierungen sind bedenke bitte, daß es nicht eine sechstellige Zahl ist hinter der Raute, sondern drei zweistellige Zahlen.


Gomze 
Fragesteller
 01.02.2017, 08:51

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

0
Dreizahn  01.02.2017, 08:58
@Gomze

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  ...


0
ohwehohach  01.02.2017, 09:05
@Dreizahn

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.

0
nax11  01.02.2017, 09:08
@Gomze

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

1
Dreizahn  01.02.2017, 09:57
@ohwehohach

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 ?    

0