有的人愛用strcpy等標準ansi函式,有的人愛用_t***x函式,有必要把來龍去脈搞清楚。 為了搞清這些函式,就必須理請幾種字元型別的寫法。char就不用說了,先說一些wchar_t。wchar_t是unicode字元的資料型別,它實際定義在裡:
typedef unsigned short wchar_t;
不能使用類似strcpy這樣的ansi c字串函式來處理wchar_t字串,必須使用wcs字首的函式,例如wcscpy。為了讓編譯器識別unicode字串,必須以在前面加乙個「l」,例如:
wchar_t *sztest=l"this is a unicode string."
wchar_t是unicode字元的資料型別,它實際定義在裡:
typedef unsigned short wchar_t;
下面在看看tchar。如果你希望同時為ansi和unicode編譯的源**,那就要include tchar.h。tchar是定義在其中的乙個巨集,它視你是否定義了_unicode巨集而定義成char或者wchar_t。如果你使用了tchar,那 麼就不應該使用ansi的str***函式或者unicode的wcs***函式了,而必須使用tchar.h中定義的_tcs***函式。另外,為了解 決剛才提到帶「l」的問題,tchar.h中定義了乙個巨集:「_text」。
以strcpy函式為例子,總結一下:
.如果你想使用ansi字串,那麼請使用這一套寫法:
char szstring[100];
strcpy(szstring,"test");
.如果你想使用unicode字串,那麼請使用這一套:
wchar_t szstring[100];
wcscpyszstring,l"test");
.如果你想通過定義_unicode巨集,而編譯ansi或者unicode字串**:
tchar szstring[100];
_tcscpy(szstring,_text("test"));
2, ansi與unicode
unicode稱為寬字元型字串,com裡使用的都是unicode字串。
將ansi轉換到unicode
(1)通過l這個巨集來實現,例如: clsidfromprogid( l"mapi.folder",&clsid);
(2)通過multibytetowidechar函式實現轉換,例如:
char *szprogid = "mapi.folder";
wchar szwideprogid[128];
clsid clsid;
long llen = multibytetowidechar(cp_acp,0,szprogid,strlen(szprogid),szwideprogid,sizeof(szwideprogid));
szwideprogid[llen] = '
(3)通過a2w巨集來實現,例如:
uses_conversion;
clsidfromprogid( a2w(szprogid),&clsid);
將unicode轉換到ansi
(1)使用widechartomultibyte,例如:
// 假設已經有了乙個unicode 串 wszsomestring...
char szansistring [max_path];
widechartomultibyte ( cp_acp, wc_compositecheck, wszsomestring, -1, szansistring, sizeof(szansistring), null, null );
(2)使用w2a巨集來實現,例如:
uses_conversion;
ptemp=w2a(wszsomestring);
char與wchar t的區別
char與wchar t的區別 有的人愛用strcpy等標準ansi函式,有的人愛用 t x函式,有必要把來龍去脈搞清楚。為了搞清這些函式,就必須理請幾種字元型別的寫法。char就不用說了,先說一些wchar t。wchar t是unicode字元的資料型別,它實際定義在裡 typedef unsi...
char 與wchar t 之間的轉換
function chartowchar purpose char to wchar wchar t lpwstr etc void chartowchar const char chr,wchar t wchar,int size function wchartochar purpose wcha...
char 與wchar t 之間的轉換
把char 轉換為wchar t 用stdlib.h 中的mbstowcs s 函式,可以通過下面的例子了解其用法 char cstr string to convert size t len strlen cstr 1 size t converted 0 wchar t wstr wstr wc...