请教一下串口输入十六进制数据无法转换成十进制-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 398|回复: 1

[未解决] 请教一下串口输入十六进制数据无法转换成十进制

[复制链接]
发表于 2022-8-18 10:19 | 显示全部楼层 |阅读模式
String comdata1 = "";
String voltage="";
void setup()
{
   Serial.begin(9600);//串口和Arduino之间的通信
}
void loop()
{
   while (Serial.available() > 0)
   {      
      comdata1 += char(Serial.read()); //每次读一个char字符,并相加
      delay(2);           
voltage=comdata1.substring(4,7);//截取需要的字符串
    }
  if(comdata1.length()> 0)
    {
unsigned long ret;
    for(char i=0, n=voltage.length(); i!=n; ++i)
     {
char ch=voltage;
int val = 0;
       if('0'<=ch && ch<='9') val = ch - '0';      
        else if('a'<=ch && ch<='f') val = ch - 'a' + 10;
         else if('A'<=ch && ch<='F') val = ch - 'A' + 10;
         else continue; // skip non-hex characters
          ret=ret*16+val;  
  }   
Serial.println(voltage);
Serial.println(ret);
comdata1 = "";
voltage= "";
    }
delay(2000);  
}

比如comdata1显示01 03 20 00 21 8D D8 00 01 38 75 0D 0A  voltage显示21 8D D8 0D 0A, 但是ret始终是0, 不知道哪里有问题。

如果程序是这样输出正常
String voltage="00 21 8D D8";
char ch;
void setup()
{
Serial.begin(9600);
}

void loop()
{
unsigned long ret;
    for(int i=0, n=voltage.length(); i!=n; ++i)
    {
      ch = voltage;
     int val = 0;
     if('0'<=ch && ch<='9')  val = ch - '0';
     else if('a'<=ch && ch<='f') val = ch - 'a' + 10;
        else if('A'<=ch && ch<='F') val = ch - 'A' + 10;
         else continue; // skip non-hex characters
          ret = ret*16 + val;
    }
    Serial.println(ret);
delay(1000);
}
ret=2199000

发表于 2022-8-19 16:45 | 显示全部楼层
你接收的是数值,根本就就不是16进制字符串
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 00:31 , Processed in 0.250498 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表