vc 中關於Unicode的一些總結

2021-05-24 07:58:20 字數 2406 閱讀 9581

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字串...