2017-06-21 482 views
0

我有一個函數,它需要一個uint64_t變量。通常我會做到這一點:將字符串轉換爲十六進制到十六進制

irsend.sendNEC(result.value); 

result.value是uint64_t中爲十六進制(我認爲)。如果我這樣做:

String((uint32_t) results.value, HEX) 

我得到這個:

FF02FD 

如果我做的:

irsend.sendNEC(0x00FF02FD) 

它完美的作品,是我想要的。

而不是抓住result.value,我想寫它作爲一個字符串(因爲這是我從GET請求獲得)。如何將"FF02FD"分成0x00FF02FD

編輯:

也許這使得它更易於理解:

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

評論寫作:

如前所述,使用C標準庫函數(例如「string to unsigned long」(strtoul)或「string to unsigned long long」(strtoull))可以將包含十六進制值的字符串轉換爲實際整數值。 。從Arduino類型String可以使用c_str()成員函數獲得實際的const char*數據。總而言之,一個做了十六進制字符串整數轉換爲

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

然後可以在代碼中被稱爲

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

Appendum:要當心約在不同的平臺上使用intlong。在帶有8位微控制器(例如ATMega328P)的Arduino Uno/Nano上,intint16_t。在32位ESP8266 CPU上,intint32_t

相關問題