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