win32編程簡介
復習Win32整理下知識.
為什么學習win32?
我們要編寫windos程序.都離不開API. 也就是我們所說的win32程序. 所以學好win32是你能不能再windows下編寫程序的基礎.
在win32下我們要學習的知識如下.
1.字符 字符的存儲.
2.多線程編程.
3.線程同步編程
4.窗口程序.城后本質.
5.消息機制.
6.進程編程
7.內存 管理
8.文件操作.
9.內存映射
10.DLL以及靜態庫程序
11.DLL注入技術.
12.模塊隱藏.脫鏈
13.進程通信編程.
14.HOOK技術.
二丶字符的本質
我們發現學習Win32要學習很多知識.不過總結一下也沒有那么多.主要是多用多學多做.
首先說下字符.
字符有 ASCII編碼格式.有 UNICODE格式. 也有UTF - 8 格式. 那么我們說下他們的存儲以及管理吧.
1.ASCII編碼.
ASCii編碼表. 因為計算機是老外發明的.所以編碼一開始只有127個.
而我們計算機存儲的編碼就是這種.
我們可以使用 十六進制工具查看一下. (winhex)
1.新建文本文檔.輸入字符a
2.winhex查看字符存儲的本質是什么.
關於第一步.省略.
可以看到存儲的是0x61 十進制是97 也就是a所計算機存儲ascii編碼的時候.存儲的就是ascii編碼表中的格式.
2.Unicode編碼
上圖的編碼是ASCII編碼. 但是只能存儲127個字符.但是怎么顯示中文那? 所以出了一個新的編碼表.也就是GB2312編碼表或者是GB2312
從127往上還有一個編碼表.用於顯示特殊符號的. 而GB2312編碼表就是使用兩個這樣的編碼來顯示的.但是有一個弊端.如果同樣一個中文.你發給外國朋友.他打開就會顯示亂碼了.
因為每個國家的編碼格式都不一樣.所以最后UNICODE格式出示.
UNICODE格式規定. 每一個字符都會使用獨立的編碼來顯示.
比如 0x41 0x32 這兩個字節來表示 中國的中字這樣你發到任何電腦上都可以看到.
注意. UNICODE只是解決了字符怎么表示.並沒有規定怎么存儲. 什么意思?
意思就是 中字代表的是 0x41 0x32 那么國字就可能代表 0x41 0x32 0x33 使用三個字節來表示.
所以UNICODE - 16出世了
UNICODE-16 沒兩個字節來表示一個字符,如果不夠兩個字節或者超過兩個字節.那么在增加兩個字節來表示.
所以我們常說的UNICODE 就是說的UNICODE-16
3.UTF-8編碼
上面說了的UNICODE-16解決了存儲方式.但是也有弊端. 一個字節我按照兩個字節來表示. 那么不是浪費了一個空間嗎.特別是用於網絡傳輸的時候.
所以UTF-8出來了. UTF - 8 就是可變長的. 什么意思.意思就是說.一個字節我就用一個字節表示.兩個字節我就用兩個字節表示. 只不過就是解析困難.
三丶代碼中的寬字符窄字符
在代碼中我們的寬字符窄字符就可以互相使用了.
char str[] = "A" Asc版本編碼使用 wchar_t str[] = L"A" Unicode版本 TCHAR str[] = TEXT("A") 兼容性版本使用. TCHAR 是windows中的一個宏.如果你的當前程序屬性設置的是ASC編碼形式. 那么TCHAR就是char.如果是UNICODE 那么TCHAR就是 wchar_t類型. TEXT()是一個宏.是一個連接符. 如果是char類型.那么鏈接符號就是空宏. 如果是wchar_t類型. 那么連接符就是 L. L表明是寬字符的意思.
他們在內存中的存儲方式也不同了.
1.A版本 長度為1. 結尾一個0
2.U版本長度為2. 結尾兩個0結束.
如果使用了不同版本的字符.那么就要使用對應的庫來操作這些字符.
A版本.
printf strlen strcat strcmp strstr
U版本
wprintf wcslen wcscat wcscmp wcsstrstr
關於字符串操作函數具體查詢MSDN. 或者Google搜索一下.