2016-04-04 107 views
1

文字列を16進数値に変換する必要がある小さなパーサーを実行しています。私はプラットフォームとしてarduinoを使用していますが、スタックしています。arduinoプラットフォームの文字列を16進数に変換する

私の文字列は、各要素が文字であるdata = "5449" あるので、私はdataHex = 0x54 0x59ようHEX値にそれを翻訳したいと思いますし、最終的にこれらの値は、私はこれを行うことができますどのようにdataAscii= TI

としてASCIIに変換する必要があります?

私はdataCharArray = 54 49の文字配列に分割し、後でそれらの値を文字TとIに変換することを考えていましたが、それが最良の方法であるかどうかはわかりません。

ありがとうございます。

私はArduinoのが今の私のPCにインストールされているので、のは、次の作品を期待してはいけない

答えて

2

:それは働いている

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

おかげで、私はいくつか不足している閉じ括弧と結果を追加しましたが、残りの部分を持っていますありがとう! – ndarkness

+0

私はデータをちょうど16進数で表示したいのですが、 'hex2c'関数で与えられた' dataHex = 0x54 0x59'と書いてありますか? – ndarkness

+1

hex2cは2つの16進文字をエンコードする文字に変換します。例えば、「35」〜「5」、「3B」〜「;」、「6D」〜「m」。 ASCIIテーブルを見て、これが明確になることを願っています。 –