1. l 顯式指定字串為寬字元型別
2. cstring 會自適應ansi和unicode. 比如cstring strline = _t("ansi和unicode編碼試驗")
ansi : strline長度為21
unicode : strline長度為16
由此還可知,ansi下,cstring的getlength獲取的是位元組數。unicode下,getlength獲取的是字元個數。
照理說,getlength應該獲取字元個數,而不是位元組個數,但在ansi下,畢竟英文本元個數就是位元組個數,getlength這樣處理也合理,但是在用在中文上的時候需要注意這點.
3. cstring的format中使用_t的方法,對整個字串使用,而不是對單獨某個格式化符號使用。
比如:int len = strline.getlength();
cstring s;
s.format(_t("len : %d"), len);
4. ansi下的字串都是以』/0』來標識字串尾的(unicode字串以「/0/0」結束)
5. ansi c++語言裡面根據_unicode(有下劃線)定義與否,各巨集分別展開為unicode或ansi字元,在windows裡面根據unicode(無下劃線)定義與否,各巨集分別展開為unicode或ansi字元。在沒有定義unicode和_unicode時,所有函式和型別都預設使用ansi的版本;在定義了unicode和_unicode之後,所有的mfc類和windows api都變成了寬位元組版本了。
6. lpctstr和const tchar*是完全等同的。其中l表示long指標,這是為了相容windows 3.1等16位作業系統遺留下來的,在win32 中以及其它的32位作業系統中,long指標和near指標及far修飾符都是為了相容的作用,沒有實際意義。p(pointer)表示這是乙個指標;c(const)表示是乙個常量;t(_t巨集)表示相容ansi和unicode,str(string)表示這個變數是乙個字串。綜上可以看出,lpctstr表示乙個指向常固定位址的可以根據一些巨集定義改變語義的字串。
7. multibytetowidechar,也許sim2lib引數如果是tchar就不需要這個函式了,因為現在是顯式使用的char,這是顯式指定為ansi的。
人家原來的sim2lib本來是支援unicode的,因為其原型是int sim2lib(lptstr lpinname,lptstr lpoutname),lptstr就是相容ansi和unicode的。
而自己寫的sim2lib是int sim2lib(char* lpinname,char* lpoutname),顯式使用了char,自然不支援unicode.
8. atoi 的相容版本是 _ttoi
9.字串字面值被當做char型別
10. 對乙個顯示指定引數為char*型別的函式,使用cstring作為引數是不允許的,因為此時cstring是被解析為wchar_t的
11. 如果工程沒有通過setting設定為unicode的,則會出現類似錯誤 unicodetombcs' : cannot convert parameter 1 from 'class cstring' to 'const unsigned short *'
12. 在unicode中使用string
#ifdef _unicode
#define tstring wstring
#else
#define tstring string
#endif
13. wchar_t*轉化為wstring,可以直接使用賦值
wchar_t szline[32];
wstring strline;
strline = szline;
14. 在unicode下使用string和stringstream
#ifdef _unicode
#define tstring wstring
#define tstringstream wstringstream
#else
#define tstring string
#define tstringstream stringstream
#endif
int num = 2;
tstring strnum;
tstringstream stream;
stream << num;
stream >> strnum;
tstring strchn = _t("漢字");
tstring strchnn;
tstringstream strm;
strm << strchn;
strm >> strchnn;
outputdebugstring(strchn.c_str());
outputdebugstring(strnum.c_str());
關於VC 中printf函式用法的一些記錄
乙個很簡單的程式,對高手來說,很小白,不過對自己來說,感覺還是值得記錄下來的。先上程式 testdemo.cpp 定義控制台應用程式的入口點。include stdafx.h include using namespace std int tmain int argc,tchar argv 執行結果...
VC 中的Unicode程式設計
整理了一下蒐集的有關vc 中的unicode程式設計問題,如char wchar t tchar t等。原帖 windows早在windows2000以後的版本裡使用unicode進行全系統開發了,也就是用於建立視窗 顯示文字 進行字串操作等所有核心函式都需用unicode字串。可我們在進行wind...
VC中的Unicode程式設計
vc中的unicode程式設計 在windows下程式設計還是支援unicode吧,大勢所趨啊,window 2k以後的系統底層都是基於unicode的,就算你呼叫ansi的api 以a結尾比如setwidowstexta 系統也會在你的程序預設堆上動態分配一塊記憶體,存放轉換後的unicode字串...