1. 程式人生 > >win32編程簡介

win32編程簡介

可變 gb2312 window 是我 弊端 內存 文本 沒有 說了

           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搜索一下.

win32編程簡介