此文章中僅考慮鍵盤可直接打出的字元,不考慮特殊符號(如♂♀等)及漢字等非 ascii 碼字元。
我們可以簡單地將鍵盤上的可顯示字元分為以下幾類:
一、大寫字母(a~z);
二、小寫字母(a~z);
三、數字(0~9);
四、小鍵盤功能運算子(+-*/.);
五、數字區符號(!@#$%^&*());
六、標點區符號(-_=+[;:'",<.>/?\|以及空格、回車符號)
七、特殊符號(這裡特指 tilde符 `~);
根據上述分類,我們可以發現,對於每個字元的按鍵,我們可以將之劃分屬性如下:
一、字母類
1、大寫字母:大寫,字母
2、小寫字母:小寫,字母
二、非字母類
1、 shift + 標點區符號:shift,標點
2、 標點區符號:無shift,標點
3、shift+ 數字區或tilde符號 :shift,數字或tilde
(小鍵盤所有字元均可在主鍵盤區打出,故不計)
我們這時候可以定義乙個資料體,用來記錄ascii轉換後對應的按鍵屬性。
typedef unsigned short rc_bvk ;
每乙個 redcontritio_bvk 共有16位二進位制,我們使用低八位儲存其鍵值,高八位用途分割如下:
0x8000 & bvk 表示該按鍵是否屬於字母
0x4000 & bvk 當該按鍵是字母時,表示是否小寫;當該按鍵非字母時,表示是否有shift。
0x2000 & bvk 表示該按鍵是否位於主鍵盤(在此程式無意義)
其餘位空餘,為將來可能的擴充套件預留。
由於我們已經知道大寫字母的ascii和鍵值相等,我們可以寫出下面的轉換**:
if( ascii >= 'a' && ascii <= 'z' )
if( ascii >= 'a' && ascii <= 'z' )
同樣的,因為主鍵盤數字區的鍵值等於數字ascii碼,所以有if( ascii >= '0' && ascii <= '9' )
接下來就開始逐符號記錄鍵值,根據度娘我們顯然可以得到這張(種)圖
(清晰度略低)
綜上,我們可以得到下面這個 ascii 向 鍵值記錄體(redcontritio_bvk)轉換的函式。
rc_bvk atorcv(unsigned char ascii)
if( ascii >= 'a' && ascii <= 'z' )
if( ascii >= '0' && ascii <= '9' )
switch( ascii )
}
然後我們就可以通過分析返回的鍵值記錄體獲取字元的輸入條件了。 Windows系統下恢復Ubuntu系統開機引導項
在重灌或修復windows系統後,開機啟動介面中的ubuntu系統引導項不見了,直接進入windows系統。下文將具體介紹如何恢復ubuntu系統開機引導項。1.準備一張ubuntu系統安裝盤 2.將ubuntu系統安裝盤插入光碟機,重啟計算機,進入bios,將開機啟動設定為光碟機 cd rom 啟...
windows系統下安裝nginx
mainline version 主線版本 stable version 穩定版本 legacy versions 歷史版本。一般生產用穩定版本,本文使用主線版本。2 啟動 注意不要直接雙擊nginx.exe,這樣會導致修改配置後重啟 停止nginx無效,需要手動關閉任務管理器內的所有nginx程序...
Windows系統下配置Leela Zero
眾所周知,l eela zero是比利時程式設計師gian carlo pascutto gcp 參照deepmind最新 在github上面開展的的一款開源圍棋專案,專案為分布式,依靠志願者提供算力。不借助任何人類知識,完全從零開始,致力於復現alphagozero 1 眾多棋友都很好奇,究竟如何...