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

Arduino 将字符串转换为十六进制到十六进制,arduino,esp8266,Arduino,Esp8266,我有一个函数,它接受一个uint64\t变量。通常我会这样做: irsend.sendNEC(result.value); result.value是十六进制的uint64\u t(我想)。如果我这样做: String((uint32_t) results.value, HEX) 我明白了: FF02FD 如果我这样做: irsend.sendNEC(0x00FF02FD) 它工作完美,这是我想要的 我不想获取result.value,而是想将其写成字符串(因为这是我从get请求中得到的

我有一个函数,它接受一个
uint64\t
变量。通常我会这样做:

irsend.sendNEC(result.value);
result.value
是十六进制的uint64\u 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);
  }
}
意见书:

如前所述,可以使用C标准库函数将包含十六进制值的字符串转换为实际整数值,如“字符串到无符号长字符串”(
strtounsignedlong)或“字符串到无符号长字符串”(
strtounsignedlong
)。从Arduino type
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()));
  }
}
for(int i=0;i
附录:注意在不同的平台上使用
int
long
。在带有8位微控制器的Arduino Uno/Nano上,如ATMega328P,一个
int
就是一个
int16\t
。在32位ESP8266 CPU上,
int
int32\u t

注释写入p:

如前所述,可以使用C标准库函数将包含十六进制值的字符串转换为实际整数值,如“字符串到无符号长字符串”(
strtounsignedlong)或“字符串到无符号长字符串”(
strtounsignedlong
)。从Arduino type
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()));
  }
}
for(int i=0;i

附录:注意在不同的平台上使用
int
long
。在带有8位微控制器的Arduino Uno/Nano上,如ATMega328P,一个
int
就是一个
int16\t
。在32位ESP8266 CPU上,
int
int32\u t

您想要C答案还是Arduino答案?@EugeneSh。呃,阿杜伊诺。它们不是相同的吗?阿杜伊诺不是C。它是C和C++的疯狂混合,还有一些愚蠢的编译规则。在C语言中,use
strtoll
irsend.sendNEC(0x00FF02FD)
采用一个硬编码值,该值在编译时固定,与
irsend.sendNEC(0xFF02FD)
没有区别。什么是字符串?和Arduino有关的是:EnGeNESH.:基于C++的,但不是完全C++(它使用了一个改进的C++编译器,GCC Irc,但是它可以是CLAN)。它肯定不是基于C的。你想要C答案还是Arduino答案?@EugeneSh。呃,阿杜伊诺。它们不是相同的吗?阿杜伊诺不是C。它是C和C++的疯狂混合,还有一些愚蠢的编译规则。在C语言中,use
strtoll
irsend.sendNEC(0x00FF02FD)
采用一个硬编码值,该值在编译时固定,与
irsend.sendNEC(0xFF02FD)
没有区别。什么是字符串?和Arduino有关的是:EnGeNESH.:基于C++的,但不是完全C++(它使用了一个改进的C++编译器,GCC Irc,但是它可以是CLAN)。它肯定不是基于C的。