Arduino将常量字符转换为无符号长

时间:2016-02-18 18:07:10

标签: variables arduino

我要求你知道如何将常量char变量[]转换为无符号长变量!

如果不是,问题不存在:

我要将此值转换为例如" 0x20DF10EF"如果我将它转换为long,它会将我还给我#34; 551489775"。

我想要的是接收" 0x20DF10EF"!

希望我能够很好地解释我的问题!

最好的问候D.Tibe!

----编辑----

         while(O != 'I'){              
          if(reciver.decode(&results)){
            CMD[i] = "0x" + String(results.value, HEX);
            CMD[i].toUpperCase();
            Val[0] = CMD[i].c_str();

            //Vil[0] = CMD[i].c_str();
            //for(int i = 0; i < sizeof(Val[0])-1 ;i++)
            //{
            //}

            Byte = String(results.bits, DEC);
            delay(1000);
            O = 'I';
            reciver.resume();
          }

这是我的代码! 我必须将我的Val [0](这是一个常量字符)转换为无符号长变量。

就像之前说的那样,我的常量字符中有一个像0x20DF10EF这样的值,我希望在我的无符号长变量上得到完全相同的,SO:

Val [0]将= = 0x20DF10EF,我希望得到相同的值,但是这样的无符号长变量

unsigned long Var将= = 0x20DF10EF

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您想要解析带有十六进制数的const char *字符串并将其放入变量中。

如果这是正确的,有两种方法:使用sscanf功能或手动转换。

方法1:

unsigned long result;

if (sscanf(Val[0], "0x%x", &result) != 1)
{
    Serial.println("Val[0] is not a valid hex value");
}

方法2:

unsigned long result = 0;
byte i;

for (i = 2; i < strlen(Val[0]); i++)
{
    if ((Val[0][i] >= '0') && (Val[0][i] <= '9'))
    {
        result = (result << 4) + Val[0][i] - '0';
    }
    else if ((Val[0][i] >= 'A') && (Val[0][i] <= 'F'))
    {
        result = (result << 4) + 10 + Val[0][i] - 'A';
    }
    else if ((Val[0][i] >= 'a') && (Val[0][i] <= 'f'))
    {
        result = (result << 4) + 10 + Val[0][i] - 'a';
    }
    else
    {
        Serial.println("Val[0] is not a valid hex value");
        break;
    }
}

顺便说一句,在字符串前面添加0x对于此转换是没用的。如果可以,请将其删除,然后在sscanf解决方案中将"0x%x"替换为"%x",或在手工制作的解决方案中将i = 2替换为i = 0