windows系統下ASCII碼與鍵值的轉換

2021-08-07 22:25:30 字數 1517 閱讀 1982

此文章中僅考慮鍵盤可直接打出的字元,不考慮特殊符號(如♂♀等)及漢字等非 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 眾多棋友都很好奇,究竟如何...