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中的……

51\/52单片机 keil C语言 字符转数字
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'...

51单片机,有了c语言的程序,如何把它变换成汇编语言
可以实现,但转换的结果不是太理想,跟反汇编差不多,需要自己去整理,其转移的标号需要自己重新定义,转换结果里是用行地址替代的

keil c中如何把字符串转化为整型 具体一点
【答案】:可以使用sscanf,就像sprintf将整型数转换成字符串输出一样,逆运算(KEILC 中scanf和printf确定了通过单片机串行口完成输入输出模式,除非做了修改,一般实际中不用)。给你个例子: unsigned char string[5]={'1234'}; unsigned int n; sscanf(string,'%u',&n); \/\/string是字符串,%u...

我在keil软件 用c语言写51单片机的时候发现?
其实,C语音的变量并不直接定义到寄存器,而是定义到内存单元,寄存器算是个中介,数据从内存取出临时存放到寄存器,然后将当时用不上的数据又从寄存器回写到内存,这样就解决了寄存器共享问题了;另外,你在调试时,再打开个反汇编窗口,跟踪C语音程序的汇编代码,就更清楚了;...

...我用的是51单片机,KEIL2编译器,如果用乘10或100的话,这样数值...
C51支持long类型 可以放置9位有效数字 足够了 float超过7位有效数字就不精确了 存放成long不就可以了

我想问问51单片机如果使用c语言将特定的数值,比如0x01,存到30h单元里 ...
BYTE value _at_ 0x30;\/\/表示value这个单字节变量指定的RAM地址为0x30。value=0x01;\/\/将0x01值赋值给30h BYTE :是定义数据类型为单字节;value:是一个变量;所以"BYTE value _at_ 0x30"表示value 这个单字节变量指定的RAM地址为0x30 如果还有问题,请继续问,呵呵!

用keil如何把c语言程序生成hex文件,求步骤
在一个工程中,按图操作 然后选中 output , 在下面的creat Hex打上勾就行了。

Keil C51中有个字符串变量str,怎么转换成指针或数组?
第一:在上一步当中,我们把字符串保存到了数组当中,那只要用一个指针指向这个数组就OK了。那我们可以让这个指针指向数组的首地址也就是字符'c'(希望你对指针已经有了一定的基础),以后偏移一个单位的存储单元就可以指向下一个元素。可以向下面一样:char str[ ] = "china";char *p; \/\/...

用C语言给51单片机编程时,怎样用P0口输出地址和数据?
只要C语句能保证编译出MOVX指令即可。你可以自行学习以下关键字的用法:pdata,xdata PBYTE,XBYTE 点到为止。剩下的自己去琢磨,Keil里面都能搜索到的。

51单片机可以直接用c语言编程么?keil μvision支持c语言么?
当然可以了,我一直都用C语言开发51单片机,很遗憾的是我目前不会汇编,呵呵 我用的软件是keil 4,可以编译C语言程序,不过据说C语言的代码效率比汇编要低,占用空间大,但C语言可以开发很复杂的程序,并且可以轻松实现浮点运算。

相似回答