線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1364
推到 Plurk!
推到 Facebook!

關於字元轉換、移位和函式返回值的程式碼

尚未結案
wnnnnnn6
一般會員


發表:5
回覆:11
積分:3
註冊:2004-11-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-04 16:01:22 IP:61.182.xxx.xxx 未訂閱
下面這段程式是 獲取單個漢字的拼音的第一個字母 function GetPYChar(strchinese:string):char; begin case word(strchinese[1])shl 8 word(strchinese[2]) of $B0A1..$B0C4: result:='A'; $B0C5..$B2C0:result:='B'; $B2C1..$B4ED:result:='C'; $B4EE..$B6E9:result:='D'; $B6EA..$B7A1:result:='E'; $B7A2..$B8C0:result:='F'; $B8C1..$B9FD:result:='G'; $B9FE..$BBF6:result:='H'; $BBF7..$BFA5:result:='J'; $BFA6..$C0AB:result:='K'; $C0BC..$C2E7:result:='L'; $C2E8..$C4C2:result:='M'; $C4C3..$C5B5:result:='N'; $C5B6..$C5BD:result:='O'; $C5BE..$C6D9:result:='P'; $C6DA..$C8BA:result:='Q'; $C8BB..$C8F5:result:='R'; $C8F6..$C8F9:result:='S'; $CBFA..$CDD9:result:='T'; $CDDA..$CEF3:result:='W'; $CEF4..$D188:result:='X'; $D1B9..$D4D0:result:='Y'; $D4D1..$D7F9:result:='Z'; else result:=char(0); end; end; 其中有兩處我不太理解: 1、對於word(strchinese[1])shl 8 word(strchinese[2])這句程式碼,它的含義是什麼呢?我的理解是: 把字串strchinese的第一個字元變成雙位元組型,然後左移8位元,再加上第二個字元,但這能得到什麼呢? 2、對於result:=char(0); 函式的結果是把0轉化成字元。這有什麼實際意義呢? 實在是搞不清楚了,請求大家說明我解釋一下吧。先謝謝了!
geniustom
版主


發表:100
回覆:303
積分:260
註冊:2003-01-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-04 20:05:49 IP:219.68.xxx.xxx 未訂閱
word(strchinese[1])shl 8 +word(strchinese[2])    因為中文字佔了2BYTEs..相當於16bits 而strchinese[1]代表是取到中文字的前一個Byte(高位元)..範圍是0~255 strchinese[2]代表是取到中文字的後一個Byte(低位元)..範圍是0~255 這時問題來了..如果我們要表示出中文字的CODE..就必定是0~65535之間的值(因為16BITS) 所以要表示出來..就要用(高位元*256)+低位元來表示..就能夠將2BYTES轉換成0~65535
而SHL 8意思就是將一串二進制碼乘上256
例如  0000000000000011 換成10進位是3..左移8位後
      0000001100000000 換成10進位是768  驗算一下256*3恰好等於768
(如果您不會轉換的話可以試看看用工程計算機轉)
之所以使用移位..是因為硬體速度快..乘上2^N只需要左移N位即可達成..不需經過乘法器
除上2^N只需要右移N位即可達成..
用這個方法就可以將中文字碼表示成0~65535之間的值了    另外..由於你這是取得中文字羅馬拼音的函式..除了上述的CASE外..也有例外的CASE
所以當然要使用例外處理..而char(0)意思就是代表一個結束字元..也等於是一個空字元的意思    您這整段程式的意義就是傳入一個2BYTE的中文字串..利用字元分解..解析出中文字的BIG5碼
並用SELECT CASE來分析那個字的羅馬拼音字母是什麼
假如他不是一個合法的中文字(else result:=char(0)) 就傳回空字元
(代表這個字沒有在處理的範圍內..例如英文字..或是特殊符號..當然沒有所謂的羅馬拼音了)
希望以上說明能讓您了解 GOOD LUCK <> <> <> < > <> < class="code"> =程式是一種藝術 也是訓練自己的分析規劃= =是段落分明 或是雜亂無章= =是一言以敝 或是廢話連篇= =是一目了然 或是艱深難懂= 體會這份藝術 您會了解另一份喜悅與成就
發表人 - geniustom 於 2004/12/04 20:12:45
wnnnnnn6
一般會員


發表:5
回覆:11
積分:3
註冊:2004-11-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-05 20:45:48 IP:61.182.xxx.xxx 未訂閱
謝謝您呀! 非常感謝!!!
系統時間:2024-06-27 0:10:54
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!