2017-01-13 1 views
-1

Ich habe ein serielles Ereignis, das ein HEX-Byte liest. Dies wird als INT gespeichert und repräsentiert den HEX-Wert. Ich muss das zurück in einen Dec-Wert konvertieren.Arduino - Covert zu Wert zu DEC HEX Wert

Beispiel:

Serien wird 0x20 gesendet - gespeichert als INT 32 - ich diese 20 bis INT konvertieren möchten

Ich habe versucht, die folgenden aber er druckt in Ordnung, aber wird nicht konvertieren. Wie bekomme ich es auch?

Sudo Code:

int from_ser; 
int new_value; 
Serial.println(from_ser); // Prints 32 
Serial.println(from_ser,HEX); // Prints 20 (The value we want!) 
new_value = (from_ser,HEX); 
Serial.println(new_value); // Prints 16 - Why !!! 

Dank

Antwort

-1

0x20 (hexadezimal) ist 32 (dezimal). Warum willst du 20? Das wäre falsch. Was würden Sie dann mit 0xFF machen?

+0

Ich muss das serielle Format beibehalten. Ich habe einen Wert gesetzt, der dezimale Werte haben will, aber alles muss als Hex über die serielle gesendet werden. – Jeremy

+0

@ Jeremy und was würdest du mit einem Hex-Wert tun, der Buchstaben enthält? Bist du sicher, dass du weißt, was du tust? Wenn 0x20 20 ist, was ist Ihrer Meinung nach 0xFF? – Piglet

2
Serial.println(from_ser,HEX); // Prints 20 (The value we want!) 

Dies ist eine Funktion der println-Methode auf Serial. Es gibt einen Code, der das zweite Argument überprüft, wenn entschieden wird, wie der Wert im ersten Argument formatiert wird. Beachten Sie, dass HEX ist nur eine offenkundige Konstante mit dem Wert 16.

new_value = (from_ser,HEX); 

Dies ist eine ganz andere Art des Ausdrucks. In C++ können Sie zwei Ausdrücke durch ein Komma trennen, und der Code wertet beide Ausdrücke aus und ergibt den Wert des zweiten. Hier HEX ist der zweite Wert, und es ist nur ein Name für 16, so new_value ist die ganze Zahl zugeordnet.

+0

Danke. Das macht Sinn! Aber wie mache ich einen neuen Wert = 20? – Jeremy

+1

Der Wert ist, was der Wert ist. Wie Sie es anzeigen, ist eine Formatierungsauswahl, die Sie beim Drucken treffen. Der Wert ist gleichzeitig 32 dezimal und 20 hexadezimal und 40 oktal und 10000 binär. Sie konvertieren nicht von einer dieser zu einer anderen, Sie entscheiden, welche Basis Sie möchten, wenn Sie es anzeigen. –

+0

Danke Ich möchte ein neues verible erstellen, das speichert 20. – Jeremy

1

Formatierung als Dezimal oder Hex ist eine Operation auf OUTPUT. Es beeinflusst nicht den tatsächlichen Wert der Variablen oder gibt eine Ganzzahl mit einem anderen Wert an. Es formatiert die Ausgabe einfach anders. Ihre Frage, den Wert zu "konvertieren", ist also bedeutungslos. Senden Sie die Variable einfach mit den angegebenen Mitteln.

In C++ bewertet der Komma-Operator im Ausdruck a , ba und verwirft das Ergebnis, dann gibt das Ergebnis der Auswertung b. So gibt new_value = (from_ser, HEX) den Wert HEX. Durch die Ausgabe von new_value demonstrieren Sie, dass HEX den Wert 16 hat.