2017-06-21 117 views
0

私はuint64_tという変数をとる関数を持っています。通常、私はこれを行うだろう:文字列を16進数で16進数に変換する

irsend.sendNEC(result.value); 

result.valueは、16進数としてuint64_tをある(と思います)。私はこれを行う場合:

String((uint32_t) results.value, HEX) 

を私はこれを取得:

FF02FD 

を私が行う場合:

irsend.sendNEC(0x00FF02FD) 

それは完璧に動作し、私が欲しいものです。

result.valueを取得する代わりに、これを文字列として書きたいと思います(これはGETリクエストから取得するためです)。 0x00FF02FDにはどのようにして"FF02FD"を作成しますか?

EDIT:

多分これはそれが簡単に理解することができます:私はエラーを取得する場所

GET: http://192.168.1.125/code=FF02FD 

//Arduino grabs the FF02FD by doing: 

for (int i = 0; i < server.args(); i++) { 
    if (server.argName(i) == "code") { 
    String code = server.arg(i); 
    irsend.sendNEC(code); 
    } 
} 

は、これは次のとおりです。

no matching function for call to 'IRsend::sendNEC(String&)'

理由:

void sendNEC(uint64_t data, uint16_t nbits = NEC_BITS, uint16_t repeat = 0); 
+0

Cの回答かArduinoの回答が必要ですか? –

+0

@EugeneSh。 Arduino。彼らは同じではないでしょうか? – MortenMoulder

+0

ArduinoはCではありません.CとC++の狂った組み合わせ、そしていくつかの愚かなコンパイルルールです。 Cでは 'strtoll'を使います。 –

答えて

2

コメント払い戻し:

既に提案されているように、 "string to unsigned long"(strtoul)や "string to unsigned long long"(strtoull)などのC標準ライブラリ関数を使用して、16進値を含む文字列を実際の整数値に変換できます。 。 ArduinoタイプのStringから、c_str()メンバ関数を使用して、実際にconst char*をデータに取得できます。すべてのすべてで、1は

、コードにAppendum

for (int i = 0; i < server.args(); i++) { 
    if (server.argName(i) == "code") { 
    String code = server.arg(i); 
    irsend.sendNEC(StrToHex(code.c_str())); 
    } 
} 

として呼び出すことができ

uint64_t StrToHex(const char* str) 
{ 
    return (uint64_t) strtoull(str, 0, 16); 
} 

ような変換を整数へ進文字列を行います異なるプラットフォーム上intまたはlongの使用については気をつけてください。 ATMega328Pなどの8ビットマイクロコントローラを備えたArduino Uno/Nanoでは、intint16_tです。 32ビットESP8266 CPUでは、intint32_tです。

関連する問題