1樓:做而論道
串列埠接收到 例如 "5670"的字元,儲存在unsigned char a中
--unsigned char a,只能存放:0~255,即一個字元。
--5670,你是怎麼存放到unsigned char a裡面的?
--這是陣列嗎?
現在要把 56 與70分別儲存到整形的l和r中……--既然有這個要求,當初,為什麼要儲存在unsigned char a中呢?
2樓:
你的字串是存在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];
這樣你就用陣列的標號取就可以了。
3樓:
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++;
......
4樓:南瓜豬的的的
#define uint16 unsigned int
#define uint8 unsigned char
void fun(uint8 * a,uint16 * l,uint16 * r)
5樓:匿名使用者
ab=ab>>8;//右移8位後,再賦值給l
l=ab;
xy=r;//低8位直接賦值
51微控制器中c語言int能轉換為字串型別嗎?怎麼轉換?
6樓:匿名使用者
因為是c51, 所以不能用 vc++裡面的c語言** eg: itoa, 也不要用列印的 eg: sprintf
為什麼? 因為c51的記憶體太小 ,如果這樣用非常佔用資源. 下面的朋友回答就顯得不夠專業了.
所以, 一般我們是這樣自己寫**使用實現的: 字串改為陣列的形式unsigned char dat[5];
dat[4]=num/10000+'0';
dat[3]=num%10000/1000+'0';
dat[2]=num%1000/100+'0';
dat[1]=num%100/10+'0';
dat[0]=num%10+'0'
7樓:匿名使用者
用 itoa函式可以參考
/* itoa example */
#include
#include
int main ()
8樓:匿名使用者
使用編譯器帶的庫,一般都有sprintf這個函式,sprintf(str, "%d", i); code會增加的有些多
9樓:
你 char 一下不就好了。就是要注意值
10樓:匿名使用者
unsigned int a;
unsigned char b;
b=(unsigned char)a;
用keil編c語言程式,51微控制器,提取字元資料轉化成十進位制輸出的資料不對,本人初學程式設計啊 5
11樓:
uint 能儲存多少位的資料?
mmsi=mmsi>>2&0x3fffffff; 這不是超出了嗎
12樓:終級人才
你看看你的兩個while是不是用錯了,它們兩個在一起用個總while,而它們兩個的關係可以用if並列,試試看吧,
keil c中如何將整型轉化為字串
13樓:
你是要把數字轉換成字串吧、
char ch[3];
int i=345;
ch[0]=i/100+48; //取百位ch[1]=(i/10)%10+48; //取十位ch[2]=i%10+48; //取個位就這個思路吧~
還有keil c中沒有檔案操作的函式、
14樓:一騎當後
可以使用sscanf,就像sprintf將整型數轉換成字串輸出一樣,逆運算(keilc 中scanf和printf確定了通過微控制器序列口完成輸入輸出模式,除非做了修改,一般實際中不用)。
給你個例子:
unsigned char string[5]=;
unsigned int n;
是字串,%u是格式控制串,u是無符號十進位制數,&n是變數n的地址。
printf ("%d\n",n); //可在keil c 開發環境中輸出觀察
你可以把上面這部分**放到keil c中的hello.c程式中觀察驗證一下。
15樓:匿名使用者
sprintf這個函式是有的,
sprintf()在stdio.h裡面.
itoa這個倒是沒得。
atoi這個有。
自己寫個itoa也不難。不自己寫的話,用sprintf這個函式,還要多用差不多2k的**。
16樓:匿名使用者
那你就機靈點
file *fp=fopen("cl.txt","rw+");
fprintf(fp,"%d",a);
str=malloc(20);
fscanf(fp,"%s",&str);
記住用完後:
free(str);
17樓:
自己寫一個itoa()函式不就行了嗎?
微控制器C語言程式設計,微控制器C語言程式設計題
按你的程式的結構,不做大的變動,又能理解的方法 四個程式合併成一個,當然就只能有一個主程式了,一個while 1 了,凡是while 1 以上的程式只保留一個就行了。四個程式的while 1 以下的都合併寫在一個while 1 下面,分為四段。有四個按鍵,判斷按鍵被按下的程式會寫吧?那判斷每個按鍵的...
微控制器C語言程式設計,51微控制器C語言程式設計
使用兩個定時器或一個定時器中使用兩個計數都能滿足你的要求。建議使用一個定時器和一個計數器即可,如計數器為i,則if i 測溫定時 0 溫度測量 if i 步進電機定時 0 步進電機控制 注 此時要求兩個控制模組的定時步長是一致,比如都是1ms 設定一個比較小的定時間隔,例如1ms,用靜態變數累加,比...
求助微控制器c語言程式問題,求助 微控制器C語言程式問題
第一個是在主程式中設定的定時計數器中斷相關引數設定,tmod 0x10 設定定時計數器的工作方式為方式1 16為計數器 也就是計數範圍為 0 65536 th1 65536 200 256 tl1 65536 200 256 設定計數器的初值為 200.ea 1 開總中斷,et1 1 開定時計數器1...