我有一个带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);
}
}
这是我收到错误的地方:
没有用于调用'IRsend :: sendNEC(String&amp;)'
的匹配函数
,因为:
void sendNEC(uint64_t data, uint16_t nbits = NEC_BITS, uint16_t repeat = 0);
答案 0 :(得分:2)
评论撰写:
正如已经建议的那样,包含十六进制值的字符串可以使用C标准库函数转换为实际的整数值,例如“string to unsigned long”(strtoul
)或“string to unsigned long long” (strtoull
)。从Arduino类型String
可以使用const char*
成员函数获取实际c_str()
到数据。总而言之,一个将十六进制字符串转换为整数转换为
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()));
}
}
附录:在不同平台上使用int
或long
时要小心。在带有8位微控制器的Arduino Uno / Nano上,例如ATMega328P,int
是int16_t
。在32位ESP8266 CPU上,int
为int32_t
。