[英]Parsing string to hex value in C++ on Arduino
我将十六进制形式的IR代码存储在字符串中(没有0x
前缀),必须通过sendNEC()
通过sendNEC()
进行IRremote.h
。 将"FFFFFF"
类的字符串转换为0xFFFFFF
的最简单方法是什么?
这是一个肮脏的代码,在严格的限制下效果很好:
F...F'\\0'
'0'
到'9'
以及'A'
到'F'
都在不断增长 诀窍是使用字符代码进行计算_
char * in;
uint64_t out=0;
int counter;
for(counter=0; in[counter]; counter++){
if(in[counter]>='0'&&in[counter]<='9') {
out*=0x10;
out+=in[counter]-'0';
} else {
//assuming that character is from 'A' to 'F'
out*=0x10;
out+=in[counter]-'A'+10;
}
}
如果获取字符串的每个字符并将其转换为数字十六进制值,则只需要计算每个数字的幂,该转换将返回一个可以用多种方式表示的数字(在您的情况下为十六进制)
std::string w("ABCD");
unsigned int res = 0;
for (int i = w.length()-1; i >= 0; i--)
{
unsigned int t = parseCharToHex(w[w.length() - 1 - i]);
std::cout << std::hex << t << std::endl;
res += pow(16, i) * t;
}
std::cout << "res: " << std::dec << res << std::endl;
函数parseCharToHex :
unsigned int parseCharToHex(const char charX)
{
if ('0' <= charX && charX <= '9') return charX - '0';
if ('a' <= charX && charX <= 'f') return 10 + charX - 'a';
if ('A' <= charX && charX <= 'F') return 10 + charX - 'A';
}
POW功能从Arduino的文档需要在这里
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.