2016-04-04 15 views
1

Ich mache einen kleinen Parser, der eine Zeichenfolge in einen Hexadezimalwert konvertieren sollte, ich benutze Arduino als Plattform, aber ich bekomme Stapel damit.Konvertieren String in HEX auf Arduino-Plattform

Mein String ist data = "5449" wobei jedes Element ein Zeichen ist, so möchte ich es auf einen HEX-Wert übersetzen wie dataHex = 0x54 0x59, und schließlich sollten diese Werte in ASCII als dataAscii= TI

übersetzen sein Wie kann ich dies tun ?

Ich dachte daran, es in ein Char-Array mit dataCharArray = 54 49 zu teilen und später diese Werte in die Zeichen T und I zu konvertieren, aber ich bin mir nicht sicher, ob das der beste Weg ist.

Vielen Dank im Voraus,

Grüße!

Antwort

2

ich nicht Arduino jetzt in meinem PC installiert habe, die folgenden Arbeiten lassen hoffen:

char nibble2c(char c) 
{ 
    if ((c>='0') && (c<='9')) 
     return c-'0' ; 
    if ((c>='A') && (c<='F')) 
     return c+10-'A' ; 
    if ((c>='a') && (c<='a')) 
     return c+10-'a' ; 
    return -1 ; 
} 

char hex2c(char c1, char c2) 
{ 
    if(nibble2c(c2) >= 0) 
    return nibble2c(c1)*16+nibble2c(c2) ; 
    return nibble2c(c1) ; 
} 

String hex2str(char *data) 
{ 
    String result = "" ; 
    for (int i=0 ; nibble2c(data[i])>=0 ; i++) 
    { 
     result += hex2c(data[i],data[i+1]) ; 
     if(nibble2c(data[i+1])>=0) 
     i++ ; 
    } 
    return result; 
} 
+1

Dank es funktioniert, ich habe einige fehlende schließende Klammer und ein Ergebnis, aber für den Rest hinzugefügt scheint gut zu funktionieren, danke! – ndarkness

+0

auf e schnelle Frage, wenn ich die Daten nur in HEX wollen, wie 'dataHex = 0x54 0x59', die durch die Funktion' hex2c' gegeben ist, richtig? – ndarkness

+1

hex2c konvertiert zwei Hexadezimalzeichen in das Zeichen, das sie codieren. Zum Beispiel "35" bis "5", "3B" bis ";", "6D" bis "m". Schauen Sie sich eine ASCII-Tabelle an und ich hoffe, dass dies klargestellt wird. –