Unicode資料型別(與ANSI關係和相互轉化)

2021-06-27 16:34:57 字數 2142 閱讀 9106

unicode資料型別(與ansi關係和相互轉化)

1,windows定義unicode資料型別

wchar(unicode字元)

pwstr(指向unicode字串的指標)

pcwstr(指向乙個恆定的unicode字串的指標)

以上都是unicode字元和字串。同時windows定義了ansi/unicode通用資料型別ptstr和pctstr。

unicode巨集沒有前置下劃線,_unicode巨集用於c執行期標頭檔案,而unicode用於windows標頭檔案。

2,c對unicode的支援

比如常見函式:char *strchr(const char*,int) --------->wchar_t *wcschr(const wchar_t *,wchar_t);

int strcmp(const char*,const char*)-------->int wcscmp(const wchar_t*,const wchar_t*);

例如strcpy--->wcscpy,strlen->wcslen;實際是把wcs取代ansi字首str。

3,tchar.h

tchar.h檔案唯一作用幫助建立ansi和unicode通用源**。

如果定義_unicode,tchar宣告為:

typedef wchar_t tchar

如果沒有定義_unicode: 

typedef char tchar;

分配字串 tchar szstring[100];或者tchar *sze="hello world";

如果生成unicode不是ansi串,必須改寫為:tchar *sze=l"hello world";(l意思是unicode字串編譯);

同時也可以改寫為tchar *sze=_text("hello world");

4,windows程式設計中建議使用系統函式,而不是c執行字串函式

使用時候加上shlapi.h標頭檔案。函式樣子為strcat、strchr等等(開頭字母大寫)

5,windows字串函式

windows提供的unicode函式;例如:

lstrcat,lstcmp,lstcmpi、lstcpy、lstrlen。這些函式可以呼叫unicode也可以呼叫ansi版本。

如果沒有定義了unicode,lstcat將擴充套件為lstcata,如果定義了unicode,擴充套件為strcatw。

6,unicode 和ansi相互轉化

char sza[100]; // an ansi string buffer

wchar szw[100];//a unicode string buffer

sprintf(sza,"%s","ansi str");            //normal sprintf: all string are ansi

sprintf(sza,"%s",l"unicode str");   //converts unicode string to ansi

swprintf(szw,l"%s",l"unicode str");// normal swprintf: all string are unicode

swprintf(szw,l"%s","ansi str");        // converts ansi string to unicode

(嚴格注意大小寫s)

lptstr 等價於 char * 

lpcstr 等價於 const char *

7,unicode和ansi之間轉化字元(函式參考msdn)

multibytetowidechar (多位元組字串轉化為寬位元組字串)

widechartomultibye(寬字串轉為多位元組字串)

例項:char buf[max_path];

size_t alen = strlen( buf ) + 1;

int wlen = multibytetowidechar(cp_acp,0,buf,alen,null,0);

lpwstr lpw = new wchar [wlen];

multibytetowidechar(cp_acp,0,buf,alen,lpw,wlen); 

。。。。。。。。。。。。//使用lpw

delete lpw;

ANS 1編碼詳解(一) 基礎語法和資料型別

ans.1是一種跨平台的編碼格式,網上關於ans.1協議的實現一抓一大把,openssl裡面有ans.1的實現,大家感興趣的可以去看看。我們這裡主要是講講ans.1編碼,這樣大家看 的時候更容易理解一些,它的組成有點類似xml和tlv有多層的巢狀。asn.1語法遵循傳統的巴科斯正規化bnf風格 最基...

SQL SERVER資料型別與C 資料型別對照表

sql server型別 c 型別 精確數字 bigint 從 2 63 9223372036854775808 到 2 63 1 9223372036854775807 的整型資料 所有數字 儲存大小為 8 個位元組。int64 int從 2 31 2,147,483,648 到 2 31 1 2...

SQL SERVER資料型別與C 資料型別對照表

sql server 型別 c 型別 精確數字 bigint 從 2 63 9223372036854775808 到2 63 1 9223372036854775807 的整型資料 所有數字 儲存大小為 8 個位元組。int64 int 從 2 31 2,147,483,648 到2 31 1 2...