在Arduino上用C ++解析字符串到十六进制值

时间:2017-04-29 07:42:25

标签: c++ arduino arduino-uno

我有十六进制格式的IR代码存储在字符串中(没有0x前缀),必须通过sendNEC()IRremote.h传输。将"FFFFFF"形式的字符串转换为0xFFFFFF的最简单方法是什么?

2 个答案:

答案 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 功能

enter image description here