将十六进制字符串转换为十六进制
Convert string as hex to hexadecimal
我有一个接受 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);
评论撰写:
如前所述,可以使用 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()));
}
}
附录:在不同平台上使用 int
或 long
时要小心。在带有 8 位微控制器的 Arduino Uno/Nano 上,例如 ATMega328P,int
是 int16_t
。在 32 位 ESP8266 CPU 上,int
是 int32_t
.
我有一个接受 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);
评论撰写:
如前所述,可以使用 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()));
}
}
附录:在不同平台上使用 int
或 long
时要小心。在带有 8 位微控制器的 Arduino Uno/Nano 上,例如 ATMega328P,int
是 int16_t
。在 32 位 ESP8266 CPU 上,int
是 int32_t
.