在程式設計中經常遇到一些有關於字串轉換的問題,如果你不熟悉經常會弄錯,下面我就把我在專案開發過程中遇到的有關字串轉換的一些問題進行一下總結。
1 char* <------> wchar_t*
多位元組字串到寬位元組字串的轉換可以使用函式multibytetowidechar,寬位元組字串到多位元組字串可以使用widechartomultibytes。
2 char* /wchar_t* <------> cstring
從char*/wchar_t*到cstring可以直接將char*/wchar_t*賦給cstring物件,注意cstring也是可以儲存寬字元字串的。從cstring轉換成wchar_t*有點複雜(不知道還有什麼其他的方法,如果有請告訴我,謝謝!),比如現在有cstring str = l"abc";需要將str轉換為wchar_t* ;
我的方法是:wchar_t temp[str.getlength()+1]; wmemset(temp, 0, sizeof(temp)); wcscpy_s(temp, sizeof(temp), lpctstr(str));
由cstring轉換成char*的方法也是一樣的。
3 char* <------> const char*
首先char*是可以作為const char*來使用的,這個不需要程式設計師來轉換。const char*轉換成char*,可以使用const_cast<>()
我想只要知道上面的這三個,windows程式設計中的主要字串問題都可以解決掉,另外cstring不是c++中帶有的型別,它只有在mfc中才有,才可以使用,cstring其實是乙個類,這個類用於處理字串資訊,很好用,但是不建議經常使用。
4 最後說一下像lpctstr這樣的巨集
注意lp指的是「指標型別」。c指的是const,不帶c的就是non-const。t指的是tchar相關的意思。過去我們學習或使用主要都是多位元組字元(串),而現在使用unicode早已是大勢所趨。windows98之前的作業系統是不支援unicode的只支援多位元組字串,現在的2000、xp都支援unicode,所以我們會經常發現有些windows函式有兩種形式比如sendmessagew,這裡w指的就是寬字元,說明這個函式支援寬字元操作。但是系統卻是向下相容的,為了便與應用程式的移植,我們經常會見到tchar這樣的型別,其實tchar不是一種型別,它只是乙個巨集。原型是這樣的:
#ifndef _unicode
#define tchar char
#else
#define tchar wchar_t
#endif
lptstr等也是這個道理!如果你的專案選擇了unicode字符集,則lptstr == wchat_t* lpctstr == const wchar_t* 。如果選擇了多位元組字符集,則lpctstr==const char* lptstr==char* 。而lpwstr是什麼意思呢?w是指寬字元,也就是wchar_t*
最後建議大家在專案中、實踐中,使用unicode字符集。
字串型別轉換總結
這裡總結了bstr,bstr t,ccombstr,cstring四種字串型別之間的轉換。其中bstr為基本資料型別,另三個為字串類。首先宣告四個型別的變數 bstr strbigbstr sysallocstring t bstr bstr t strsmallbstr t bstr t ccom...
字串型別轉換總結
這裡總結了bstr,bstr t,ccombstr,cstring四種字串型別之間的轉換。其中bstr為基本資料型別,另三個為字串類。首先宣告四個型別的變數 bstr strbigbstr sysallocstring t bstr bstr t strsmallbstr t bstr t ccom...
關於字串轉換的總結
不同編碼的字串轉換的方法網上挺多的,但是能用的就不多了,在此總結一下常用的字串轉換方法 有些是自己摸索的,有些是看微軟例子程式知道的 不足的轉換我會在以後的日誌裡加上的 wchar t轉換為char char轉換為wchar t tchar char和wchar t 與 bstr t互 cstrin...