我有十六进制格式的IR代码存储在字符串中(没有0x
前缀),必须通过sendNEC()
从IRremote.h
传输。将"FFFFFF"
形式的字符串转换为0xFFFFFF
的最简单方法是什么?
答案 0 :(得分:0)
这是一个脏代码,在严格的限制下运行良好:
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;
}
}
答案 1 :(得分:0)
如果你得到字符串的每个字符并转换为数字十六进制值,那么你只需要计算每个数字的幂,该转换返回一个可以用几种方式表示的数字(在你的情况下为十六进制)< / p>
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';
}
arduino doc here 需要pow 功能