51/52单片机 keil C语言 字符转数字 160
通过串口接收到数据,存储在字符变量a中,为“ABXY",如何将AB与XY拆开,保存到两个int变量L与R中?求解(单片机/C语言初学者……希望能讲的详细点……)是我说的有...
通过串口接收到数据,存储在字符变量a中,为“ABXY",如何将AB与XY拆开,保存到两个int变量L与R中?求解(单片机/C语言初学者……希望能讲的详细点……)
是我说的有误……串口接收到 例如 "5670"的字符,存储在unsigned char a中
现在要把 56 与70分别存储到整形的L和R中…… 展开
是我说的有误……串口接收到 例如 "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];
这样你就用数组的标号取就可以了。
*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];
这样你就用数组的标号取就可以了。
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
STM32是ARM Cortex内核单片机和微处理器市场和技术方面的佼佼者,目前提供16大产品线 (F0, G0, F1, F2, F3, G4, F4, F7, H7, MP1, L0, L1, L4, L4+,L5, WB),超过100...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
展开全部
串口接收到 例如 "5670"的字符,存储在unsigned char a中
--unsigned char a,只能存放:0~255,即一个字符。
--5670,你是怎么存放到unsigned char a里面的?
--这是数组吗?
现在要把 56 与70分别存储到整形的L和R中……
--既然有这个要求,当初,为什么要存储在unsigned char a中呢?
--unsigned char a,只能存放:0~255,即一个字符。
--5670,你是怎么存放到unsigned char a里面的?
--这是数组吗?
现在要把 56 与70分别存储到整形的L和R中……
--既然有这个要求,当初,为什么要存储在unsigned char a中呢?
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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++;
......
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++;
......
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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);
}
#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);
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
AB=AB>>8;//右移8位后,再赋值给L
L=AB;
XY=R;//低8位直接赋值
L=AB;
XY=R;//低8位直接赋值
追问
但是开头的总变量没用……ABXY都是存储在a中的……
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询