代码转自 uer8.com 大学生电子爱好者哈 分享给大家。- char mes,i=0;
- int real,zero=0;
- int number; //number储存实际输入数值
- int change(int);
- int pow(int,int);
- void setup(){
- Serial.begin(9600);
- }
- void loop(){
- while(Serial.available()>0){
- mes=Serial.read();
- //该部分代码用于记录末尾0的个数,然后最后添上
- if(mes=='0') zero++;
- else if(mes!='\r') zero=0;
- //若需修改结束标志,可以更改'\r'
- if(mes=='\r') {
- i=0;
- number=change(real);
- for(;zero>0;zero--) number=number*10; //该循环用于将末尾丢失的0添上
- Serial.println(real);
- Serial.println(number); //number中储存实际输入数值,real是反过来的数值可以无视
- real=0;
- break;
- }
- real+=(mes-'0')*pow(10,i);
- i++;
- }
- }
- int pow(int n,int x){ //自制简易乘方函数,返回n^x。也可以试试调用math.h中的pow()
- int val=1;
- for(;x>0;x--) val=val*n;
- return val;
- }
- int change(int a){ //读到的数值首末倒过来
- int p,real;
- int i=0,n=0;
- for(p=a;p!=0;n++) p=p/10; //n记录数值的位数
- for(;a!=0;i++){
- p=a%10; //取余,一次取出个位
- real+=p*pow(10,n-i-1);
- a=a/10;
- }
- return real;
- }
复制代码 其实还有一个思路可以试试:
将读到的字符按顺序存储到字符数组里,然后一个个取出来乘以10的乘方即可。
这样可以免去将数的头尾倒过来。
不过既然写出来了就懒得改了 |