windows 開發的必要知識

2021-07-29 21:47:58 字數 3901 閱讀 6975

現在的windows 作業系統(7 ,8 ,10)都是windows nt核心的。該核心是支援32位或則64位優先權式多工(preemptive multitasking)及多執行緒的圖形作業系統。且是執行在x86架構的cpu上面的。

x86是乙個指令集架構家族(指令就是cpu中最小的行動單元,也就是組合語言翻譯之後對應的機器碼)

x86為cisc(複雜指令集電腦,complex instruction set computer)。最大的特點是低端位元組序(little endian)

cisc對應的是risc(精簡指令集計算,英語:reduced instruction set computing)最常見arm架構的處理器(基本上所有的只能手機用的都是這個架構),特點位高階位元組序(big endian)

上面的blog很好的解釋了兩者的關係。

windwos 存在3大核心.dll

這代表了windows的三個主要子系統,它們被稱作kernelusergdi。當子系統的數目在windows最近版本中增多時,大多數典型的windows程式產生的函式呼叫仍對應到這三個模組之一。kernel(32位的kernel32.dll實現)處理所有在傳統上由作業系統核心處理的事務-記憶體管理、檔案i/o和多工管理。user(32位的user32.dll實作)指使用者介面,實作所有視窗運作機制。gdi32位的gdi32.dll實作)是乙個圖形裝置介面,允許程式在螢幕和印表機上顯示文字和圖形。

和字符集有關的專業術語很多,解釋起來很麻煩。但是有必要了解一下。先說一說什麼是字符集標準。我們都知道計算機中儲存的最小單位是bit。那麼為了計算機的規格的同一必須有個標準來說明對映關係。比如0100 0001(十進位制65)表示a,0110 0001(十進位制97)表示a,等等。後來有乙個組織叫做ansi(american national standards institute,美國國家標準協會)定義了一種字符集標準,我們統稱為ascii(american standard code for information interchange,美國資訊交換標準碼),有26個小寫字母、26個大寫字母、10個數字、32個符號、33個控制代碼和乙個空格,總共128個字元碼。而ascii的「版本」現在記錄在ansi x3.4-1986字符集——用於資訊交換的7位美國國家標準碼(7-bit ascii:7-bit american national standard code for information interchange)。這個標準是7-bit的美國標準,所以世界上別的國家語言中的特殊符號是無法表示的。所有先後有很多組織和公司有發明了新的字元標準來解決這個問題。又過了很久又出現了乙個組織叫做iso(international standard organization,國際標準組織)它發明了一種ascii的變種。**0x40、0x5b、0x5c、0x5d、0x7b、0x7c和0x7d「為國家使用保留」,而**0x5e、0x60和0x7e標為「當國內要求的特殊字元需要8、9或10個空間位置時,可用於其它圖形符號」。這顯然不是乙個最佳的國際解決方案,因為這並不能保證一致性。但這卻顯示了人們如何想盡辦法為不同的語言來編碼的。後來又經過衍化出現了一種ansi/iso 8859-1-1987,即「american national standard for information processing-8-bit single-byte coded graphic character sets-part 1: latin alphabet no 1」,通常也簡寫為「latin 1」。這個標準是之前兩個組織的標準的折中處理。一位元組中的低7位128個字元還是ascii標準。這樣就還有128位表示別國家的字元了。但是128為怎麼可能表示全部國家的字元呢。所有就有了**頁的概念,例如把多出來的128位中填入法語中特殊符號。然後和之前都128個ascii標準的字元打包在一起,這樣還是乙個位元組。但是我們規定這樣打包之後的東西遍上號,如***頁。這樣以後想用法語的特殊字元就載入相應的**頁就可以了。但是這個能回帶來一些別的問題。假如不同mac和pc上的法語**頁的編號不一樣。所以這樣的標準還是有一些問題,講到這這種**頁機制還是有一些問題。像中國,日本,南韓這樣的國家都是使用象形文本,這些文字可遠不止128為,這樣在**頁的基礎上就出現了dbcs(double-byte character set,雙位元組字符集 )標準。dbcs從256**開始,就像ascii一樣。與任何行為良好的**頁一樣,最初的128個**是ascii。然而,較高的128個**中的某些特殊值一旦出現就表總是跟隨著第二個位元組。這兩個位元組一起(稱作首位元組和跟隨位元組)定義乙個字元,通常是乙個複雜的象形文本。雖然中文、日文和韓文共享一些相同的象形文本,但顯然這三種語言是不同的,而且經常是同乙個象形文本在三種不同的語言中代表三件不同的事。windows支援四個不同的雙位元組字符集:**頁932(日文)、936(簡體中文)、949(韓語)和950(繁體漢字)。只有為這些國家(地區)生產的windows版本才支援dbcs。那麼說了怎麼多,那有什麼標準既不是用**頁,也不是用雙位元組表示的字符集標準。當然有。那就是unicode字元,準確的來說是windows支援的是utf-16(下面有解釋)**中從0x0000到0x007f就是ascii字元,而接下來的128個unicode字元(**從0x0080到0x00ff)是iso 8859-1對ascii的擴充套件。unicode中不同部分的字元都同樣基於現有的標準。這是為了便於轉換。希臘字母表使用從0x0370到0x03ff的**,斯拉夫語使用從0x0400到0x04ff的**,美國使用從0x0530到0x058f的**,希伯來語使用從0x0590到0x05ff的**。中國、日本和南韓的象形文本(總稱為cjk)占用了從0x3000到0x9fff的**。unicode有缺點嗎?當然有。unicode字串占用的記憶體是ascii字串的兩倍。(然而壓縮檔案有助於極大地減少檔案所佔的磁碟空間。)但也許最糟的缺點是:人們相對來說還不習慣使用unicode。身為程式寫作者,這就是我們的工作。

看看下面的關鍵字你能理清楚什麼關係嗎?

ansi:(美國國家標準協會american national standards institute)發布

iso:(國際標準化組織 international organization for standardization)

ascii:(美國資訊交換標準碼american standard code for information interchange)

**頁 :(code page)

dbcs:(雙位元組字符集 double-byte character set)。

unicode

tips:

unicode時一種標準,它定義了整型到字元的對映關係。但是如何儲存在計算機中呢,這時候就出現了儲存的解決方案utf-8,和utf-16,utf32

utf-8

這個在網頁源**上經常能見到的一種標誌。在實際儲存中乙個字元可能是1位元組,2位元組,3位元組,4個位元組

utf-16

為2個位元組。對於2位元組以外的字元符號,utf-16支援surrogate(**,程式設計了

4個位元組表示)。

utf-32

4個位元組

gbk和gb2312都是中文字元編碼。因為在建立它的時候沒有unicode這個國際的字元編碼,所以各國都和中國一樣建立了自己的字元標準。它們都和unicode是一樣都是一種整數和字元的對映關係。其中gbk包含gb2312,是一種擴充

還有很多編碼不一一介紹了。

Windows開發基礎知識

windows 開發指的是以windows api winapi 進行在windows平台上的開發 參考資料 微軟針對windows進行開發的開發相關資訊 在windows開發經常會遇到一些隱晦難懂的api以及資料型別,已將常見型別寫入表中做對應 windows本地支援unicode字串使用在ui節...

開篇必要的概率統計知識(一)

本人弱雞軟體專業,現在開始自學資料探勘,開篇記錄下前導知識 概率論與數理統計 我就調幾個關鍵知識點描述 1 離散型隨機變數 如果隨機變數的全部可能取值只有有限個或可列無限個,則稱這種隨機變數未離散型隨機變數 離散型隨機變數x的分布律xx1 x2x3 p1 3 1 31 3 概率取值肯定是要大於等於0...

HTML 關於現代前端必要知識

由vs code空.html檔案打出html 5或 按下tab建後預設生成的.html基本框架 說起 第一行 很慶幸,如今我們只需要這麼乙個自閉合標籤即可告訴瀏覽器,請使用html5的標準來解析下面的 從第二行起,我們就需要用到前端相關知識了,以下將知識劃分四塊 普通標籤 自閉合標籤 標籤的屬性 標...