将字符串转换为十六进制为十六进制

时间:2017-06-21 17:56:26

标签: arduino esp8266

我有一个带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);

1 个答案:

答案 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()));
  }
}

附录:在不同平台上使用intlong时要小心。在带有8位微控制器的Arduino Uno / Nano上,例如ATMega328P,intint16_t。在32位ESP8266 CPU上,intint32_t