LPTSTR、LPCSTR、LPSTR、LPCTSTR、LPWSTR、LPCWSTR: 具體查看:http://blog.csdn.net/yibo_ge/article/details/51058917> http://www.cppblog.com/gezidan/archive/2011/08 ...
LPTSTR、LPCSTR、LPSTR、LPCTSTR、LPWSTR、LPCWSTR: 具體查看:http://blog.csdn.net/yibo_ge/article/details/51058917>
http://www.cppblog.com/gezidan/archive/2011/08/08/152755.html L 表示long指針 這是為了相容Windows 3.1等16位操作系統遺留下來的,在win32中以及其他的32位操作系統中, long指針和near指針及far修飾符都是為了相容的作用。沒有實際意義。 P 表示這是一個指針 C 表示是一個常量 T 表示在Win32環境中, 有一個_T巨集 STR 表示這個變數是一個字元串 LPSTR:32-bit指針,指向一個字元串,每個字元占1位元組char LPCSTR: 32-bit指針,指向一個常字元串,每個字元占1位元組char LPTSTR::32-bit指針,每字元可能占1位元組或2位元組,取決於Unicode是否定義 TCHAR LPCTSTR::32-bit指針,指向一個常字元串,每字元可能占1位元組或2位元組,取決於Unicode是否定義 TCHAR LPWSTR:32-bit指針,每字元占2位元組,數據類型為16位的wchar_t LPCWSTR::32-bit指針,指向一個常字元串,每字元占2位元組,數據類型為16位的wchar_t Windows使用兩種字元集ANSI和UNICODE,前者就是通常使用的單位元組方式,但這種方式處理象中文這樣的雙位元組字元不方便,容易出現半個漢字的情況。而後者是雙位元組方式,方便處理雙位元組字元。 MS推薦你使用相匹配的字元串函數,比如處理LPTSTR或者LPCTSTR 的時候,不要用strlen ,而是要用_tcslen,否則在UNICODE的編譯條件下,strlen不能處理 wchar_t*的字元串。 char* 是指向ANSI字元數組的指針,其中每個字元占據8位(有效數據是除掉最高位的其他7位),這裡保持了與傳統的C,C++的相容; LP的含義是長指針(long pointer),LPSTR是一個指向以‘\0’結尾的ANSI字元數組的指針,與char*可以互換使用,在win32中較多地使用LPSTR。而LPCSTR中增加的‘C’的含義是“CONSTANT”(常量),表明這種數據類型的實例不能被使用它的API函數改變,除此之外,它與LPSTR是等同的。 數據類型轉換: CString類中的字元就是被聲明為TCHAR類型的,它提供了一個封裝好的類供用戶方便地使用。 可以使用下麵的ATL巨集來進行,最好是將變數定義成TCHAR、LPTSTR等T類型,可以避免轉換。
ATL巨集介紹:
A2BSTR OLE2A T2A W2A
A2COLE OLE2BSTR T2BSTR W2BSTR
A2CT OLE2CA T2CA W2CA
A2CW OLE2CT T2COLE W2COLE
A2OLE OLE2CW T2CW W2CT
A2T OLE2T T2OLE W2OLE
A2W OLE2W T2W W2T
W、OLE 寬字元串,也就是 UNICODE。
T 中間類型T。如果定義了 _UNICODE,則T表示W;如果定義了 _MBCS,則T表示A C const 的縮寫 利用這些巨集,可以快速的進行各種字元間的轉換。使用前必須包含頭文件,並且申明USER_CONVERSION;使用 ATL 轉換巨集,由於不用釋放臨時空間,所以使用起來非常方便。但是考慮到棧空間的尺寸(VC 預設2M),使用時要註意幾點: 1、只適合於進行短字元串的轉換;
2、不要試圖在一個次數比較多的迴圈體內進行轉換;
3、不要試圖對字元型文件內容進行轉換,因為文件尺寸一般情況下是比較大的; 4、對情況 2 和 3,要使用 MultiByteToWideChar() 和 WideCharToMultiByte(); 轉換示例: char name[10];
TCHAR sex[5] ;
char *p = name; TCHAR *pw = sex; LPSTR lpstr = name;
LPCSTR lpcstr = name;
lpcstr = lpstr;
lpstr = p;
p = (char*)sex;
pw = (WCHAR*)name;
LPWSTR lpwstr = (LPWSTR)lpstr;
lpwstr = (LPWSTR)lpcstr;
LPCWSTR lpcwstr = (LPCWSTR)lpstr; lpcwstr = (LPCWSTR)name; CString str(lpstr);
CString str1(lpcstr);
CString str2(lpwstr);
CString str3(lpcwstr);
CString str4(name); CString str5(sex); lpwstr = (LPWSTR)(LPCWSTR)str;
lpstr = (LPSTR)(LPCWSTR)str; lpcstr = (LPCSTR)(LPCWSTR)str; p = (char*)str.GetBuffer(); pw = str.GetBuffer(); CString轉換成LPSTR另一種方式:
CString strFileName;
LPSTR
lpStr = strFileName.GetBuffer();
strFileName.ReleaseBuffer();
在資料庫里,有n首碼的字串類型就是UNICODE類型,這種類型中,固定用兩個位元組來表示一個字元,無論這個字元是漢字還是英文字母,或是別的什麼。
如果你要測試"abc漢字"這個串的長度,在沒有n首碼的數據類型里,這個字串是7個字元的長度,因為一個漢字相當於兩個字元。而在有n首碼的數據類型里,同樣的測試串長度的函數將會告訴你是5個字元,因為一個漢字就是一個字元。