2016-08-03 10 views
0

Ich möchte eine Konvertierung durchführen, aber weiß nicht wie.Arduino: Erhalten Hex-Wert aus zwei Dezimalzeichenfolgen

Ursprünglich bekomme ich einen Hex-Wert wie 03 EE, der 1006 darstellt. Nun sind diese Daten in einem String-Array repräsentieren und als Dezimalzahlen:

[0] = "3" 
[1] = "238" 

Was ist der einfachste Weg, aus dieser Situation in eine Dezimalzahl 1006 zurück zu bekommen?

ich dies tun auf einem Arduino mit C++

+0

Nun müssen Sie den gleichen Algorithmus rückwärts anwenden: jedes Feld in seine hexadezimale Zeichenfolgendarstellung konvertieren, alle Zeichenfolgen verketten und die neue Zeichenfolge in ihre numerische hexadezimale Darstellung umwandeln – specializt

+0

@Kai Interessant: woher bekommen Sie diese Zeichenfolge? – ilotXXI

+0

Es ist aus dem CAN-Bus meines Autos. Die Zeichenfolge repräsentiert die aktuellen RPM der Maschinen. – Kai

Antwort

0

Da Arduino String Hex-Darstellungen nicht verarbeiten kann, sollten Sie es manuell oder mit anderen Bibliotheken (z. Verwendung sprintf von Standard-C-Bibliothek, wenn es möglich ist). Hier ist eine manuelle Art und Weise:

int decBytesToInt(const String &msByte, const String &lsByte) 
{ 
    int res = 0; 
    res |= (msByte.toInt() & 0xFF) << 8; 
    res |= (lsByte.toInt() & 0xFF); 
} 

msByte und lsByte sind höchstwertigen und niedrigstwertigen Bytes Dezimaldarstellungen entsprechend.

Angenommen, dass int ist natürlich 16-Bit.

+0

Hallo. Wie würde ich also "3EE" dieser Funktion zuführen, damit es 1006 zurückgibt? – Kai

+0

@Kai, 'int x = decBytesToInt (" 3 "," 238 ")'. – ilotXXI

+0

Vielen Dank. Ich werde es versuchen, sobald ich in der Nähe von meinem Arduino Board bin :) – Kai

1

So etwas sollte es tun:

const char* s[] = {"3", "238"}; 

int result = (std::stoi(std::string(s[0])) << 8) 
      + std::stoi(std::string(s[1])); 
std::cout << result; 

Bitte beachten Sie, dass ich std::stoi verwenden, wenn Sie es nicht mögen, bitte für weitere Umwandlung sehen Möglichkeiten an: Convert string to int C++

live example