日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Windows 中_T和L

發布時間:2024/8/23 windows 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Windows 中_T和L 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

 _T("")是一個宏,定義于tchar.h下。[1]

?????? #define _T(x) _ _T(x)  

?????? #ifdef? _UNICODE

?????? #define _ _T(x) L ## x

  #else?? /* ndef _UNICODE */

?????? #define _ _T(x)????? x


  他的作用是讓你的程序支持Unicode編碼

  因為Windows使用兩種字符集ANSI和UNICODE,前者就是通常使用的單字節方式,但這種方式處理象中文這樣的雙字節字符不方便,容易出現半個漢字的情況。

  而后者是雙字節方式,方便處理雙字節字符。Windows NT的所有與字符有關的函數都提供兩種方式的版本,而Windows 9x只支持ANSI方式。

  如果你編譯一個程序為ANSI方式,_T實際不起任何作用,編譯器會把_T("Hello")以ANSI方式保存;而如果編譯一個程序為UNICODE方式,則編譯器會把_T("Hello")字符串以UNICODE方式保存。

????? _T和L的區別在于,L不管你是以什么方式編譯,一律以UNICODE方式保存。

  LPSTR:32bit指針指向一個字符串,每個字符占1字節

  LPCSTR:32-bit指針指向一個常字符串,每個字符占1字節

  LPCTSTR:32-bit指針指向一個常字符串,每字符可能占1字節或2字節,取決于Unicode是否定義

  LPTSTR:32-bit指針每字符可能占1字節或2字節,取決于Unicode是否定義

  L是表示字符串資源為Unicode的。

  比如

  wchar_t?Str[] = L"Hello World!";

  這個就是雙子節存儲字符了。

  _T是一個適配的宏~

  當

  #ifdef _UNICODE的時候

  _T就是L

  沒有#ifdef _UNICODE的時候

  _T就是ANSI的。

  比如

  LPTSTR lpStr = new TCHAR[32];

  TCHAR* szBuf = _T("Hello");

  以上兩句使得無論是在UNICODE編譯條件下都是正確編譯的。

  而且MS推薦你使用相匹配的字符串函數。

  比如處理LPTSTR或者LPCTSTR 的時候,不要用strlen ,而是要用_tcslen

  否則在UNICODE的編譯條件下,strlen不能處理 wchar_t*的字符串。

  T是非常有意思的一個符號(TCHAR、LPCTSTR、LPTSTR、_T()、_TEXT()...),它表示使用一種中間類型,既不明確表示使用 MBCS,也不明確表示使用 UNICODE。那到底使用哪種字符集?編譯的時候才決定????

??????TCHAR是char還是wchar_t這個是根據是否定義了#ifdef _UNICODE來決定的。在vs2010中,根據選擇字符集來決定了是否定義_UNICODE。

????? Character Use Unicode Character Set
????? typedef wchar_t???? TCHAR;

????? Character? Use Multi-Byte Character Set
????? typedef char??????????? TCHAR;

總結

以上是生活随笔為你收集整理的Windows 中_T和L的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。