關於字元轉換、移位和函式返回值的程式碼 |
尚未結案
|
wnnnnnn6
一般會員 發表:5 回覆:11 積分:3 註冊:2004-11-24 發送簡訊給我 |
下面這段程式是 獲取單個漢字的拼音的第一個字母 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 發送簡訊給我 |
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"> =程式是一種藝術 也是訓練自己的分析規劃= =是段落分明 或是雜亂無章= =是一言以敝 或是廢話連篇= =是一目了然 或是艱深難懂= 體會這份藝術 您會了解另一份喜悅與成就 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |