2016-04-07 11 views
-2

Ich suche nach eingebauter C- oder C++ - Funktion, die es mir ermöglicht, einen Float in eine HEX-Zeichenfolge zu konvertieren, bisher habe ich itoa verwendet, aber es funktioniert nicht mit negativen Werten, da es mit unsigned für Basis 16 funktioniert Ich fragte mich, welches ich stattdessen verwenden könnte, das den negativen Wert behandeln könnte.Arduino C-Funktion zum Konvertieren von String in HEX?

Mit itoa ich meinen negativen Wert verlieren, wie es unten zu sehen ist,

Acceleration X: -9 | X angle: **-0.5156689167** 
Acceleration Y: -69 | Y angle: **-3.9565520286** 
Acceleration Z: 986 | Z angle: 80.4013519287 
Value of ACC per axe (x,y,z) in HEX ->ffcdfe751f68 
Data to be send x ->**ffcd** 
Data to be send y ->**fe75** 
Data to be send z ->1f68 

Welche andere Funktion konnte ich mit der gleichen Funktionalität nutzen?

+0

http://stackoverflow.com/questions/5100718/integer-to-hex-string-in-c – Marco

+0

@Marco Dank, sah ich, dass die Lösung, was ich, ob es nicht sicher bin, wird in Arduino arbeiten oder nicht. – ndarkness

+0

Wenn Sie nicht sicher sind, probieren Sie es aus. – ayushgp

Antwort

1

Mit Blick auf die Ergebnisse, die Sie zur Verfügung gestellt haben, würde ich sagen, dass sie korrekt sind. Sie haben die binären Komplement Werte:

ffcd = -51 in 16-Bit binary complement 
fe75 = -395 in 16-Bit binary complement 
1f68 = 8040 in 16-Bit binary complement 

Teilen Sie es durch 100 und Sie erhalten Ihre (gerundeten) Fließkommawerte.

Atoi kann mit negativen Werten umgehen. Es zeigt den negativen Status an, indem das Bit mit der höchsten Wertigkeit der Binärdarstellung auf 1 gesetzt wird. Sie erhalten kein - Zeichen, wenn Sie eines erwartet haben.

Sie können das binäre Komplement selbst berechnen, indem Sie den (16-Bit-) HEX-Wert in eine Dezimalzahl konvertieren und vom Ergebnis 65536 subtrahieren.

zB

ffcd -dec-> 65485 -sub-> 65485 - 65536 = -51 -float-> -51/100.0 = - 0.51 
+0

Vielen Dank Ich wusste nicht, dass Itoa das Zeichen auf dem wichtigsten Bit codierte !! Das ist perfekt! – ndarkness

+0

@ Peter Paul Kiefer eine andere Frage knallte mir in den Kopf, wenn die Zahl nicht negativ ist, dann würde ich sie falsch konvertieren, oder? SO, um zu überprüfen, ob negativ ist, sollte ich immer das signifikanteste Bit der Zahl überprüfen, richtig? – ndarkness

+0

@ndarkness, Ich löste meine Frage, indem ich 'strtol' benutzte, um von HEX in dec umzurechnen – ndarkness