有關 keil c , string to int 問題?

各位師兄,小弟有些事搞不清楚,情況如下。
char buffer[4];
經過RS232讀入字串並放入 buffer[]內,
例如: buffer[4] = {0x31,0x32,0x33,0x34} //即字串為"1234"
我想把buffer 的字串,改變成 十進制的1234,
是否其實 使用 buffer 就是等於 十進制的1234,
如果想把buffer 內清為"0",是否*buffer = '0' ; 即可。
因我搞不清字串,ASCII, int, 之間的關係。
希望各位師兄指點一下,我應該怎樣思考?
感謝。

各位師兄,小弟有些事搞不清楚,情況如下。
char buffer[4];
經過RS232讀入字串並放入 buffer[]內,
例如: ...
likuen 發表於 2016-7-15 14:45


電腦嘅memory只係一堆bits
啲DATA TYPE、ASCII(string encoding) 只係將現實中嘅概念(例如string 同int) 同電腦memory嘅狀態來回轉換嘅方法

至於你個問題你話想將字串改變成十進制,到底係咩意思?
你個BUFF 入面嘅字,就已經係"十進制"嘅字串

而你要將BUFF 清為"0",可以用memset,如果你係用'0',只會set左個'0' 呢個character 入去
即係0x30

TOP

本帖最後由 marlin12 於 2016-7-15 18:05 編輯

c語言的字元、字串、和ASCII,在這條link有解釋:
字元與字串http://dhcp.tcgs.tc.edu.tw/c/p009.htm

如果用c語言的字串來處理,buffer應該最少有5個字元。
char buffer[5] = "1234";   // 多1個字元來儲存最後的'\0'
或者
char buffer[] = "1234";   // 系統會自動計算要多少字元
或者
char buffer[] =  {0x31,0x32,0x33,0x34,0x00};


把buffer的字串,轉為十進制的整數(integer)數字,可以用以下的stdlib.h的函數:
int  val1 = atoi( buffer );

把buffer 的內容變為"0",可以用以下的string.h的函數:
strcpy( buffer, "0" );

TOP

回覆 3# marlin12
超感謝師兄指點,我會測試一下。再一次謝謝你。

TOP

回覆 2# masseffect
感謝師兄回答,本來我也以為 buffer 內就是十進制的 1234,但我寫
If (buffer == 1234)
{
   .....
}
就是跳不進去,因為我非常混亂不清,所以在此求教。

TOP

回覆  masseffect
感謝師兄回答,本來我也以為 buffer 內就是十進制的 1234,但我寫
If (buffer == 1234)
...
likuen 發表於 2016-7-15 22:42

首先...
電腦的記憶是沒有十進制的...
你可以理解為電腦的記憶是二進制
十進制,或者八進制,只是給你(人)看的

buffer 裡面,存的是一堆bits,你可以理解為一堆1/0
buffer是array現在對你來說有點難..可以先理解一個char
char 在C 裡是一個1BYTE的data type,也就是8bit
以"1" 這個字元來說,他的ASCII CODE是49
換成二進制是0011 0001,這個東西會存在於電腦的記憶體當中...
如果你以ascii去理解他,他就是一個"1" 的字元,如果你是以整數去理解他,他就是49這個數字

至於buffer== 1234
這是完全錯誤,第一buffer 是一個array
你在這裡buffer == 1234是在比較buffer 這個variable 的address和1234這個數字
正確做法是用strcmp(),而且你要比較的是"1234" 而不是1234

另外,正如上面所講,記得個array要有多一個位放'\0'
如果唔係有時會有意想不到嘅後果

TOP

回覆 6# masseffect
非常感謝,你這樣解釋,我了解多了我會再試試,再一次感謝。

TOP

各位師兄,經過你們指導,我已成功將字串轉換成功。原來我犯了array最後沒有加'\0'及計算錯 arrary的大少。
還想請教,如何可以將字串內特定位置抽出及放入 另一array內。
例如: buffer[] = "12345678";
運算後可得出如下:
data1 = "12";
data2 = "34";
data3 = "5678";

我試過用 stncpy,但只能從第一位開始複製到指定長度,我翻查期它指令,好像沒有字串向左移位的功能。(用 buffer<<=2; 及 _crol_ 均出現錯誤)
希望師兄能再指點。謝謝。

TOP

回覆 8# likuen

Try:

  1. char data = "12345678";

  2. char buff[64];

  3. int n1 = 0, n2 = 0, n3 = 0;

  4. printf("%d, %d, %d\n", n1, n2, n3); // 0, 0, 0

  5. n1 = atoi(strncpy(buff, data, 2));
  6. n2 = atoi(strncpy(buff, data + 2, 2));
  7. n3 = atoi(strncpy(buff, data + 4, 4));

  8. printf("%d, %d, %d\n", n1, n2, n3); // 12, 34, 5678
複製代碼

TOP

回覆 9# skhui2005
好聰明的計算法,我明天試試,謝謝你。

TOP