2010年3月20日 星期六

資料型態認識─字元與字串 (Character & String)

http://4rdp.blogspot.com/2010/03/character-string.html

前一篇整數型態資料介紹了 char,今天再深入討論它的另一種運用─字元,現今電腦系統能夠訊息全球相通,跟 ASCII(American Standard Code for Information Interchange,美國信息互換標準代碼)有非常重要關聯,它規範了電腦字元編碼系統,讓每個數字、文字和符號都有固定對應碼,以利電腦資料處理,這是學習程式設計首先必須要知道的基本知識,在字串、檔案處理甚至通訊都會利用到。

讓我簡單地介紹它的運用,當你在電腦鍵盤按了 A 鍵,電腦作業系統會把這個鍵盤掃描碼,轉換成 ASCII 0x41(0b01000001),存在記憶體,到時候螢幕顯示,就以這記憶體的內容去查詢字型表,將它顯示出來,或是將這字碼儲存到磁碟檔案中,只需要一個字元(8 bits),不會佔用過多記憶空間。而字串是字元的組合,程式必須宣告一字元陣列(字串變數)來存放這些字元資料。例如,char str[16];。

ASCII 除了規範可看見的字碼外,同時也定義一些控制字元,比如有CR (Carriage Return 歸位)、LF (Line Feed 換行)、NUL (NULL 空字元,表示結尾) 等等。舉個簡單的例子讓各位容易明瞭,兩個短句寫著:


I have a book.
It is very funny.


那麼記憶體中,字串資料將會是,

I have a book.(CR)(LF)It is very funny.(CR)(LF)(NULL)


以 ASCII 十六進制表示會是,

0x49 0x20 0x68 0x61 0x76 0x65 0x20 0x61 0x20 0x62 0x6F 0x6F 0x6B 0x2E 0x0D 0x0A
0x49 0x74 0x20 0x69 0x73 0x20 0x76 0x65 0x72 0x79 0x20 0x66 0x75 0x6E 0x6E 0x73
0x2E 0x0D 0x0A
0x00


這樣電腦程式就可以逐字處理。不過數字字串是不能直接數值計算的,需要呼叫字串轉換數值的程式,這點程式設計初學者很容易搞錯,看下面例子:

字串 "1234" 為 0x31 0x32 0x33 0x34 0x00 (記得加 0x00 結尾),轉換成 int 數值為 1234 = 0x4D2,存放在記憶體較低位址優先,因此 int 的八位元資料擺放次序將為,0xD2 0x04。

常用數值與文字互轉函式,
在 NXC 中有:StrToNum(strVal)、NumToStr(value)
在 VB 中有:Val(strVal)、"" & value

6 則留言:

  1. 對我非常有用 借貼FB

    回覆刪除
  2. 鳥仔您好,

    歡迎引用,記得標示文章出處來自研發養成所或提供連結即可。

    回覆刪除
  3. 恩恩 忘了說我是貼網址的
    回時忘了有複製這疑慮

    回覆刪除
  4. 歡迎你鳥仔,

    不知您是Facebook上那位鳥仔?

    回覆刪除
  5. FB上我用本名 藍翊宸(鳥仔)0.0

    回覆刪除
  6. 鳥仔,

    很高興認識你,希望這裹裡的文章對你有幫助。

    回覆刪除