我想问问怎么把单片机串口接收到的字符转化为int型赋给程序里面的int型变量
还想问问有没有人用串口做过通信之类的项目,还有几个问题需要交流。
谢谢了!
你的意思是把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了。
就可以了。
好的 谢谢了啊