繁体   English   中英

在Arduino上的C ++中将字符串解析为十六进制值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM