1,編碼方式
ascii編碼:用來表示英文,它使用1個位元組表示,其中第一位規定為0,其他7位儲存資料,一共可以表示128個字元。(占用乙個位元組,即乙個位元組表示乙個字元)
gbk/gb2312/gb18030:表示漢字。gb2312表示簡體中文,gbk 是 gb2312的擴充套件 ,除了相容gb2312外,它還能顯示正體中文,還有日文的假名,gb18030表示中文,相容gbk和gb2312。(占用兩個位元組,即兩個位元組表示乙個字元)
unicode編碼:包含世界上所有的字元,是乙個字符集。(占用兩個位元組,即兩個位元組表示乙個字元)
utf-8:是unicode字元的實現方式之一,它使用1-4個字元表示乙個符號,根據不同的符號而變化位元組長度。
2.符串前面加l表示該字串是unicode字串。
_t是乙個巨集,如果專案使用了unicode字符集(定義了unicode巨集),則自動在字串前面加上l,否則字串不變。因此,visual
c++裡邊定義字串的時候,用_t來保證相容性。vc支援ascii和unicode兩種字元型別,用_t可以保證從ascii編碼型別轉換到unicode編碼型別的時候,程式不需要修改。
因此,當你在vs2005/vs2008下進行寫c++(mfc程式時)最好應用_t;而在vs2010等下直接用l吧!
t和l的區別在於,l不管你是以什麼方式編譯,一律以unicode方式儲存。
3.l"hello, world" 這個字串儲存的是wchar的
_t"hello, world" 如果工程定義的unicde則這個字串是按wchar方式儲存的,如果沒有定義則是按char方式儲存的
4.一、在字串前加乙個l作用:
如 l"我的字串" 表示將ansi字串轉換成unicode的字串,就是每個字元占用兩個位元組。
strlen("asd") = 3;
strlen(l"asd") = 6;
二、 _t巨集可以把乙個引號引起來的字串,根據你的環境設定,使得編譯器會根據編譯目標環境選擇合適的(unicode還是ansi)字元處理方式
如果你定義了unicode,那麼_t巨集會把字串前面加乙個l。這時 _t("abcd") 相當於 l"abcd" ,這是寬字串。
如果沒有定義,那麼_t巨集不會在字串前面加那個l,_t("abcd") 就等價於 "abcd"
MFC 中L 和 T 巨集
t 是乙個巨集,定義在tchar.h下 define t x t x define t x x define t x l x tchar p t hello 他的作用是讓你的程式支援unicode編碼 因為windows使用 兩種字符集 ansi 和 unicode 前者就是通常使用的單位元組方式 ...
MFC中的L和 T巨集
問 define abc l abc l 巨集是幹什麼用的,和unicode相關嗎?如果這樣,這和 define abc t abc 有分別嗎?答 l表示unicode串,比如wchar t str l yangsongx t在ansi編譯模式下表示ansi串,在unicode下表示unicode串...
C 中 T 和L的區別
字串前面加l表示該字串是unicode字串。t是乙個巨集,如果專案使用了unicode字符集 定義了unicode巨集 則自動在字串前面加上l,否則字串不變。因此,visual c 裡面,定義字串的時候,用 t來保證相容性。vc支援ascii和unicode兩種字元型別,用 t可以保證從ascii編...