引用LPSTR、LPCSTR、LPTSTR、LPCTSTR、LPWSTR及LPCWSTR的意義及區別(轉載)
2、Unicode:用兩個位元組表示一個字元的編碼方式。比如字元'A'在ASCII下面用一個位元組表示,而在Unicode下面用兩個位元組表示,其中高位元組用"0"填充;函式'程'在ASCII下面用兩個位元組表示,而在Unicode下面也是用兩個位元組表示。Unicode的用處就是定長表示世界文字,據統計,用兩個位元組可以編碼現存的所有文字而沒有二義。
3、Windows下的程式設計可以支援ANSI和Unicode兩種編碼方法的字串,具體使用哪種就要看定義了MBCS巨集還是Unicode巨集。MBCS巨集對應的字串指標為LPSTR(即char*),Unicode對應的指標為LPWSTR(即unsigned char*)。為了寫程式的方便,微軟定義了型別LPTSTR,在MBCS下它表示char*,在Unicode下它表示unsigned char*,這就可以重定義一個巨集進行不同字符集的轉換了。
4、關係
LPSTR: 32bit指標 指向一個字串,每個字元佔1位元組。 相當於 char *
LPCSTR: 32-bit指標 指向一個常字串,每個字元佔1位元組。 相當於 const char *
LPTSTR: 32-bit指標 每字元可能佔1位元組或2位元組,取決於Unicode是否定義
LPCTSTR:32-bit指標 指向一個常字串,每字元可能佔1位元組或2位元組,取決於Unicode是否定義
LPWSTR: 32-bit指標,指向一個unicode字串的指標,每個字元佔2位元組。
LPCWSTR:32-bit指標, 指向一個unicode字串常量的指標,每個字元佔2位元組。
在上面的型別中,L表示long, P表示指標,C表示constant, T表示指標指向的字元佔的位元組數取決於Unicode是否定義,W表示wide,STR就是string的意思
LPSTR = char *
LPCSTR = const char *
LPTSTR = _TCHAR * (或 TCHAR *)
LPCTSTR = const _TCHAR * (或 const TCHAR *)
LPWSTR = wchar_t *
LPCWSTR = const wchar_t *
5、Windows使用兩種字符集ANSI和Unicode,前者在處理英文字元時使用單位元組方式,在處理中文字元時使用雙位元組方式。後者不管是英文字元還是中文字元都是採用雙位元組方式表示。Windows NT的所有與字元有關的函式都提供了兩種方式的版本,而Windows 9x只支援ANSI方式。_T一般同字元常量相關,如_T("你好!");。如果編碼方式為ANSI,_T不起任何作用;如果編碼方式為Unicode,編譯器會把"你好!"以
Unicode方式進行儲存。_T和_L的區別在於,_L不管你是以什麼方式編譯,一律以Unicode方法儲存。
6、L表示字串資源採用Unicode編碼方式,示例如下:
wchar_t Str[]=L"Hello World!"; //每個字元都用2個位元組來儲存
7、_T是一個適配巨集。當定義了_UNICODE時,_T和L相同;否則,_T的字串採用ANSI編碼方式。示例如
下:
LPTSTR lptStr=new TCHAR[32];
TCHAR* szBuf=_T("Hello");
以上兩個語句,無論是在ANSI編碼方式,還是在Unicode編碼方式下都是正確的。
8、微軟推薦使用相匹配的字串函式。例如,在處理LPTSTR或LPCTSTR的時候,應該使用_tcslen來替代strlen函式。否則,在Unicode編碼方式下,strlen不能處理wchar_t*的字串。
9、T是一個非常重要的符號(TCHAR、LPTSTR、LPCTSTR、_T()和_TEXT()等),它表示使用一箇中間型別,既不明確表示使用MBCS,也不明確表示使用Unicode。到底使用哪種字符集,在編譯的時候才決定。
10、注意L 和 _T 的使用方法。
LPTSTR, LPCTSTR, 及_T(常量字串) 受_T 影響。
介紹字串型別:char, wchar_t, TCHAR, CHAR, WCHAR.
TCHAR 的定義:
#ifdef UNICODE
typedef wchar_t TCHAR;
#else
typedef unsigned char TCHAR;
#endif
typedef unsigned char CHAR;
typedef unsigned wchar_t WCHAR;
由此可以看出,unsigned char 和 wchar_t 都是基本資料型別, CHAR實施上就是unsigned char, WCHAR為wchar_t ,而TCHAR根據是否支援unicode而不同。
在程式中,可以用的名稱有5種,unsigned char(CHAR), wchar_t(WCHAR), TCHAR, 但為了擴充套件性和相容性,推薦使用TCHAR.//
相關推薦
引用LPSTR、LPCSTR、LPTSTR、LPCTSTR、LPWSTR及LPCWSTR的意義及區別(轉載)
1、ANSI(即MBCS):為多位元組字符集,它是不定長表示世界文字的編碼方式。ANSI表示英文字母時就和ASCII一樣,但表示其他文字時就需要用多位元組。 2、Unicode:用兩個位元組表示一個字元的編碼方式。比如字元'A'在ASCII下面用一個位元組表示,而在Unic
VC++ 字符串Dword、LPSTR、LPWSTR、LPCSTR、LPCWSTR、LPTSTR、LPCTSTR
width order pst lpcstr div 轉換方法 dword 字符 wchar_t 類 型 MBCS UNICODE TCHAR char char WCHAR wchar_t wchar_t LPSTR c
LPTSTR、LPCSTR、LPCTSTR、LPSTR的來源及意義
UNICODE:它是用兩個位元組表示一個字元的方法。比如字元'A'在ASCII下面是一個字元,可'A'在UNICODE下面是兩個字元,高字元用0填充,而且漢字'程'在ASCII下面是兩個位元組,而在UNICODE下仍舊是兩個位元組。UNICODE的用處就是定長表示世界文字,據
EF基礎知識小記六(使用Code First建模自引用關系,常用於系統菜單、文件目錄等有層級之分的實體)
-1 一個數 div 基礎知識 text col 菜單 hasmany roo 日常開發中,經常會碰到一些自引用的實體,比如系統菜單、目錄實體,這類實體往往自己引用自己,所以我們必須學會使用Code First來建立這一類的模型. 以下是自引用表的數據庫關系圖: ok,下
1.Java基礎之識別符號命名法、八大基本資料型別三大引用型別、運算子以及程式分支結構、方法的定義過載遞迴
一、基礎匯入: 1.java採用Unicode編碼,16進位制編碼,支援世界上所有語言(GBK,gb2312,Unicode,UTF-8,ISO-8859-1)。 多執行緒---> c-編譯型語言 Test.java--原始檔,原始檔必須與主類名(public class Test
block使用小結、在arc中使用block、如何防止迴圈引用
使用block已經有一段時間了,感覺自己瞭解的還行,但是幾天前看到CocoaChina上一個關於block的小測試主題 : 【小測試】你真的知道blocks在Objective-C中是怎麼工作的嗎?,發現竟然做錯了幾道, 才知道自己想當然的理解是錯誤的,所以抽時間學習了下,並且通過一些測試程式碼進行測試
JavaScript基礎——引用型別(二)日期型別Date、正則表示式型別RegExp
Date型別 ECMAScript中的Date型別是在早期Java中的java.util.Date類基礎上構建的。為此,Date型別使用自UTC(CoordinatedUniversal Time,國際協調時間)1970年1月1日午夜(零時)開始經過的毫秒數來儲存日期。在使
[c++] LPWSTR、LPCSTR、LPCWSTR淺析
LPCSTR是Win32和VC++所使用的一種字元串資料型別。LPCSTR被定義成是一個指向以'\0'結尾的常量字元的指標。 LPWSTR是wchar_t字串 LPCWSTR是一個指向unicode編碼字串的32位指標,所指向字串是wchar型,而不是char型。 LP
二十、面向物件2— 隱藏屬性、私有屬性、私有方法、__del__ 等四種如何使用、測量物件的引用個數
一、隱藏屬性 在一個方法裡面去規範傳遞的屬性值。(更安全),為每一個屬性新增set get 方法 二、私有屬性 1、在外部使用私有成員的名字時,會提示找不到。 2、例如self.__
18.dubbo引用配置快取、執行緒棧自動dump、netty4支援
dubbo 2.5.6版本新增了對netty4通訊模組的支援,啟用方式如下 provider端: <dubbo:protocol server="netty4" /> 或 <dubbo:provider server="netty4" /> consumer端: <dubbo
為什麼C++中常量引用可以繫結非常量的物件、字面值和一般表示式 詳解
在c++語言中,除兩種例外情況,其他引用的型別都要和與之繫結的物件嚴格匹配,如int型的引用只能繫結int型的物件;並且引用不能直接與字面值常量或表示式結果繫結。 其中一種例外情況是:初始化常量引用時,允許用任意表達式作為初始值,只要該表示式的結果能轉換成引用的
表單提交 防註入XSS 1入庫時轉義、後臺 2出庫轉義、前臺
his 驗證 替換字符 插入 如果 不同的 js代碼 urn ida 第一種 入庫過濾js自動填充時過濾js代碼class GoodsModel extends Model{ // 填充 protected $_auto = [ // 自己補充填充
oracle 12c 多租戶 pdb 恢復(單個pdb數據文件、非系統pdb表空間、整個pdb數據庫)
數據文件 ota ora-01110 創建 正常 方式 cti users rman 環境:數據庫版本 Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production實驗準備:1.--
Ztree _ 橫向顯示子節點、點擊文字勾選、去除指定元素input的勾選狀態
.cn hid ttr 很好 clas pre ges tree 效果 前些天項目需要樹結構表現數據,需求ztree就能滿足所以直接使用ztree只是踩了些小坑。。。 1.ztree子節點橫向顯示(下圖): 效果說明:第三級子節點按需求橫向顯示其他豎向顯示,每行最多顯示5
進擊的Python【第九章】:paramiko模塊、線程與進程、各種線程鎖、queue隊列、生產者消費者模型
password locking form maxsize 廁所 sorted [0 hostname nbsp 一、paramiko模塊 他是什麽東西? paramiko模塊是用python語言寫的一個模塊,遵循SSH2協議,支持以加密和認證的方式,進行遠程服務器的連
[C++] 動態規劃之矩陣連乘、最長公共子序列、最大子段和、最長單調遞增子序列
每次 種子 () return 避免 amp 可能 text com 一、動態規劃的基本思想 動態規劃算法通常用於求解具有某種最優性質的問題。在這類問題中,可能會有許多可行解。每一個解都對應於一個值,我們希望找到具有最優值的解。 將待求解問題分解成若幹個子問題,先求
Android----獲得當前應用包名、當前activity的名字、推斷是否是系統桌面、service類
owin agen gac arr ddc add gets small cli 1、獲得當前應用包名 public static String getRunningActivityName(Context context) { ActivityManager acti
【Python】07、python內置數據結構之字符串及bytes
str 字符串 一、字符串1、定義和初始化In [4]: s = "hello python" In [4]: s = "hello python" In [5]: s Out[5]: ‘hello python‘ In [6]: s = ‘hello python‘ In [7]: s Out
struts2的返回類型、struts的標簽庫、struts2中完成國際化
let 頁面 const patch red struts2標簽 property 單選 bmi struts2的返回類型:在jsp-servlet中, 返回的類型主要有 轉發, 重定向; 轉發主要是RequestDispatcher的forward方法來進行操作的req.
bos 第3天(easyui彈窗邊界問題、取派員的添加、修改和批量刪除)
檔案 劃分 bug servle 手機號 rules function project rem BOS項目筆記 第3天 今天內容安排: 1、解決window窗口bug 2、bos項目整體需求分析(基礎設置、取派、中轉、路由、報表) 3、取派員添加功能 4、jQuery