51/52单片机 keil C语言 字符转数字

通过串口接收到数据,存储在字符变量a中,为“ABXY",如何将AB与XY拆开,保存到两个int变量L与R中?求解(单片机/C语言初学者……希望能讲的详细点……)
是我说的有误……串口接收到 例如 "5670"的字符,存储在unsigned char a中
现在要把 56 与70分别存储到整形的L和R中……

你的字符串是存在char* a中吧。
*a就是第一个字符,*(++a)就是第二字符。再来一次*(++a)就是第三个字符,但是记得不要记a加的出了字符串的界就行了。
要不就把串口发来的数据存到一个char a[10]的数组中。然后用的时候用下标去一个一个取,比如:
a[0]就是第一个字符,a[1]就是第二个字符。
单独取出来的字符再和'0'这个字符相减就是你的字符表示的真实数字。
比如一个char a = '9'.
int number = a - '0';
这样number中就存的是数字9.
第一种情况,如果你的字符串是存在char *s中,像这样:
char *s = "5670";
这样,第一个字符就是
char a = *s;
int number1 = a - '0'; //这里number1中存的就是数字5
同理,再接着写
a = *(++s);
int number2 = a - '0';//这里的number2中存的就是数字6
第三个字符,接着写:
a = *(++s);
int number3 = a - '0'j;//number3中存的就是数字7
第四个字符;接着:
a = *(++s);
int number4 = a - '0';//这时number4中存的就是数字0
这个时候再把四个数字,存到你的L和R中:
int L = number0*10+number2;
int R = number3*10+number4;
第二种情况,如果从串口取到的字符都是存在一个数组中,比如:
char a[10];
这样你就用数组的标号取就可以了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-22
串口接收到 例如 "5670"的字符,存储在unsigned char a中

--unsigned char a,只能存放:0~255,即一个字符。

--5670,你是怎么存放到unsigned char a里面的?

--这是数组吗?

现在要把 56 与70分别存储到整形的L和R中……

--既然有这个要求,当初,为什么要存储在unsigned char a中呢?本回答被网友采纳
第2个回答  2013-10-20
unsigned int L ,R ;
unsigned char a[9];
unsigned char *p;
unsigned char *q;
...
p=&a[0];
q=&L;
(*q++)=(*p++);
*q=*p++;
q=&R;
(*q++)=(*p++);
*q=*p++;
......
第3个回答  推荐于2018-03-26
#define uint16 unsigned int
#define uint8 unsigned char

void fun(uint8 * a,uint16 * L,uint16 * R)
{
*L=a[0];
*L+=(uint16)((uint16)(a[1])<<8);
*R=a[2];
*R+=(uint16)((uint16)(a[3])<<8);
}本回答被网友采纳
第4个回答  2013-10-20
AB=AB>>8;//右移8位后,再赋值给L
L=AB;
XY=R;//低8位直接赋值追问

但是开头的总变量没用……ABXY都是存储在a中的……

相似回答