微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 我想问问怎么把单片机串口接收到的字符转化为int型赋给程序里面的int型变量

我想问问怎么把单片机串口接收到的字符转化为int型赋给程序里面的int型变量

时间:10-02 整理:3721RD 点击:
我的单片机的串口接收到的是字符,例如31、1f、fb等等字符,因为信号在传输过程中是以ASCII码传送的,所以我接收到的也是ADCII码,我想转化为int型,然后赋值给我单片机程序里面的int型的变量。我尝试过强制转换,例如:(int)35,前面这种转换直接就得到了5。而我不想要得到这种结果,我想把“35”按照十六进制转换为int型的3*16+5=53.
  还想问问有没有人用串口做过通信之类的项目,还有几个问题需要交流。
  谢谢了!

你的意思是把16进制转换成十进制是吗?而不是int,int是整型的意思,十六进制也是整型。

可不可以这样理解,例如你要接收或发送0x31这个数字,实际使用ASCII码,就是0x33,0x31两个字节
现在收到0x33和0x31之后,你想把它变成31赋值给你的变量
或者你想把0x31发送出去,转换成0x33,0x31
如果是这样,还算简单:
发送可以这样写
  char data = 0x31;
  char send_ch[2] = {0} ;
  unsigned char temp = 0;
     
  temp = data & 0x0f
  if( temp <= 9 )  //0~9的数字
  {
        send_ch[0] = temp + 0x30;
  }
  else  //a~f的数字转换为ASCII码的字母
  {
         send_ch[0] = temp + 0x51;
  }
   temp = (data >> 4) & 0x0f
  if( temp <= 9 )  //0~9的数字
  {
        send_ch[1] = temp + 0x30;  //数字0的ASCII码值是0x30,相差0x30,1~9同理
  }
  else  //a~f的数字转换为ASCII码的字母
  {
         send_ch[1] = temp + 0x51; //字母a的值是0x61,数字a与其相差0x51,b、c、d、e、f同理
  }
   SendData( send_ch);  //发送出去
接收反过来操作就可以了,例如收到0x33,和0x31
unsigned char rx_data[2] = {0x33, 0x31};  //接收过程我这里就用赋值替代
char data = 0;
unsigned char temp;
if( ( rx_data[0] >= '0' ) && ( rx_data[0] <= '9' ) )  //低位是数字
{
     temp =  rx_data[0] - 0x30;
}
else if( ( rx_data[0] >= 'a' ) && ( rx_data[0] <= 'f' )  )  //低位是字母转换到a~f
{
     temp =  rx_data[0] - 0x51;  
}
data  |= temp;
if( ( rx_data[1] >= '0' ) && ( rx_data[1] <= '9' ) )  //低位是数字
{
     temp =  rx_data[0] - 0x30;
}
else if( ( rx_data[1] >= 'a' ) && ( rx_data[1] <= 'f' )  )
{
     temp =  rx_data[0] - 0x51;
}
data  |= (temp << 4);
我写的大概意思,你可以把这些变成一个或两个函数,需要转换的时候调用就可以了



对对是十进制,不好意思  没说明白,我已经搞定了,我直接用强制转换就能得到十进制的数了,谢谢了

不客气                                

怎么个强制转换法?

0x10 十六进制转换成十进制就是16
直接用
int temp = (int)0x10;//temp就等于16了。
就可以了。

好的  谢谢了啊  

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top