轉 規範化程式設計 ANSI和UNICODE的使用

2022-10-10 19:33:09 字數 1508 閱讀 6897

到底什麼是ansi,什麼是unicode呢?其實這是兩種不同的編碼方式標準,ansi中的字元採用8bit,而unicode中的字元採用16bit。8bit的ansi編碼只能表示256種字元,表示26個英文本母是綽綽有餘的,但是表示漢字,南韓語,日語等有著成千上萬個字元的非西方字元肯定就不夠了,正是如此才引入了unicode標準。

在軟體開發中,特別是使用c語言的一些有關字串處理的函式,ansi和unicode是區分是用的,那麼ansi型別的字元和unicode型別的字元如何定義,如何使用呢?ansi和unicode又如何轉換呢?

一.定義部分:

ansi:    char str[1024];  可用字串處理函式:strcpy( ),  strcat( ), strlen( )等等。unicode:wchar_t str[1024];可用字串處理函式

二.可用函式:

ansi:即 char, 可用字串處理函式:strcat( ),strcpy( ), strlen( )等以str打頭的函式。

unicode:即wchar_t 可用字串處理函式:wcscat(),wcscpy(),wcslen()等以wcs打頭的函式。

三.系統支援

windows 98 :只支援ansi。

windows 2k :既支援ansi又支援unicode。

windows ce :只支援unicode。

說明1. 在com裡面只支援unicode。

2. windows 2000整個os系統都是基於unicode的,為此在windows 2000下使用ansi是需要付出代價的,雖然在編碼上不用任何的轉換,但是這種轉化是隱藏的,是占用系統資源的(cpu,記憶體)。

3. 在windows 98下必須使用unicode,則需要自己手動的編碼切換。

三.如何區分:

在我們軟體開發中往往需要即支援ansi又支援unicode,不可能在要求型別轉換的時候,重新改變字串的型別,和使用於字串上的操作函式。為此, 標準的c 執行期庫和windows 提供了巨集定義的方式。

在c語言裡面提供了 _unicode巨集(有下劃線),在windows裡面提供了unicode巨集(無下劃線),只要定了_unicode巨集和unicode巨集,系統就會自動切換到unicode版本,否則,系統按照ansi的方式進行編譯和執行。

只定義了巨集並不能實現自動的轉換,他還需要一系列的字元定義支援。

1. tchar

如果定義了unicode巨集則tchar被定義為wchar_t。

typedef wchar_t    tchar;

否則tchar被定義為char

typedef char            tchar;

2. lptstr

如果定義了unicode巨集則lptstr被定義為lpwstr。

typedef lptstr    lpwstr;

否則tchar被定義為char

typedef lptstr    lpstr;

說明: 在使用字串常量的時候需要使用_text(「mystr」)來支援系統的自動轉換。

規範化程式設計 ANSI和UNICODE的使用

到底什麼是ansi,什麼是unicode呢?其實這是兩種不同的編碼方式標準,ansi中的字元採用8bit,而unicode中的字元採用16bit。8bit的ansi編碼只能表示256種字元,表示26個英文本母是綽綽有餘的,但是表示漢字,南韓語,日語等有著成千上萬個字元的非西方字元肯定就不夠了,正是如...

C 基礎和規範化系列 2

c 分類有很多種形式,但按照是否包含指標變數對類的影響很大,按照是否包含指標變數來進行分類。需要定義big three 關鍵的3個方法 pragma once include using namespace std class mystring private char m data include...

規範化的C 程式設計方法備忘錄 整數宣告

形式上把整數分成3大類 通用型整數 int long short char,及他們的unsigned型別 特點 標準位元組的寬度 用於大小有限,又不強調最大值,或者最大值總保證滿足實際需要的場合。平台無關。不同的編譯器,同樣型別的整數,不同編譯器廠商規定的實際位元組的寬度可能不同,具體由編譯器廠商決...