我要求你知道如何将常量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
答案 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
。