52微控制器 keil c語言 符轉數字

時間 2022-02-01 18:19:48

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...