最近做東西的時候總是碰上字元型別的相互轉化, 每次碰到就網上搜尋, 太麻煩, **些有用的以方便以後使用. 現在可能還不全面, 以後遇到了再逐步新增吧.
(1) char*轉換成cstring
若將char*轉換成cstring,除了直接賦值外,還可使用cstring::format進行。例如:
char charray = "this is a test";
char * p = "this is a test";
或lpstr p = "this is a test";
或在已定義unicode應的用程式中
tchar * p = _t("this is a test");
或lptstr p = _t("this is a test");
cstring thestring = charray;
thestring.format(_t("%s"), charray);
thestring = p;
(2) cstring轉換成char*
若將cstring類轉換成char*(lpstr)型別,常常使用下列三種方法:
方法一,使用強制轉換。例如:
cstring thestring( "this is a test" );
lptstr lpsz =(lptstr)(lpctstr)thestring;
方法二,使用strcpy。例如:
cstring thestring( "this is a test" );
lptstr lpsz = new tchar[thestring.getlength()+1];
_tcscpy(lpsz, thestring);
需要說明的是,strcpy(或可移值unicode/mbcs的_tcscpy)的第二個引數是 const wchar_t* (unicode)或const char* (ansi),系統編譯器將會自動對其進行轉換。
方法三,使用cstring::getbuffer。例如:
cstring s(_t("this is a test "));
lptstr p = s.getbuffer();
// 在這裡新增使用p的**
if(p != null) *p = _t('/0');
s.releasebuffer();
// 使用完後及時釋放,以便能使用其它的cstring成員函式
(3) bstr轉換成char*
方法一,使用convertbstrtostring。例如:
#include
#pragma comment(lib, "comsupp.lib")
int _tmain(int argc, _tchar* argv)
方法二,使用_bstr_t的賦值運算子過載。例如:
_bstr_t b = bstrtext;
char* lpsztext2 = b;
(4) char*轉換成bstr
方法一,使用sysallocstring等api函式。例如:
bstr bstrtext = ::sysallocstring(l"test");
bstr bstrtext = ::sysallocstringlen(l"test",4);
bstr bstrtext = ::sysallocstringbytelen("test",4);
方法二,使用colevariant或_variant_t。例如:
//colevariant strvar("this is a test");
_variant_t strvar("this is a test");
bstr bstrtext = strvar.bstrval;
方法三,使用_bstr_t,這是一種最簡單的方法。例如:
bstr bstrtext = _bstr_t("this is a test");
方法四,使用ccombstr。例如:
bstr bstrtext = ccombstr("this is a test");
或ccombstr bstr("this is a test");
bstr bstrtext = bstr.m_str;
方法五,使用convertstringtobstr。例如:
char* lpsztext = "test";
bstr bstrtext = _com_util::convertstringtobstr(lpsztext);
(5) cstring轉換成bstr
通常是通過使用cstringt::allocsysstring來實現。例如:
cstring str("this is a test");
bstr bstrtext = str.allocsysstring();
…sysfreestring(bstrtext); // 用完釋放
(6) bstr轉換成cstring
一般可按下列方法進行:
bstr bstrtext = ::sysallocstring(l"test");
cstringa str;
str.empty();
str = bstrtext;
或cstringa str(bstrtext);
(7) ansi、unicode和寬字元之間的轉換
方法一,使用multibytetowidechar將ansi字元轉換成unicode字元,使用widechartomultibyte將unicode字元轉換成ansi字元。
方法二,使用「_t」將ansi轉換成「一般」型別字串,使用「l」將ansi轉換成unicode,而在託管c++環境中還可使用s將ansi字串轉換成string*物件。例如:
tchar tstr = _t("this is a test");
wchar_t wszstr = l"this is a test";
string* str = s」this is a test」;
方法三,使用atl 7.0的轉換巨集和類。atl7.0在原有3.0基礎上完善和增加了許多字串轉換巨集以及提供相應的類,它具有如圖3所示的統一形式:
其中,第乙個c表示「類」,以便於atl 3.0巨集相區別,第二個c表示常量,2表示「to」,ex表示要開闢一定大小的緩衝。sourcetype和destinationtype可以是a、t、w和ole,其含義分別是ansi、unicode、「一般」型別和ole字串。例如,ca2ct就是將ansi轉換成一般型別的字串常量。下面是一些示例**:
lptstr tstr= ca2tex<16>("this is a test");
lpctstr tcstr= ca2ct("this is a test");
wchar_t wszstr = l"this is a test";
char* chstr = cw2a(wszstr);
C string的一些函式
strlen 和.size 有什麼區別?strlen 是c的字串長度函式,size 是c 中的string類的長度函式,不是乙個庫里的的東西。strlen的用法是strlen char 而size 的用法是str.size strlen 是函式,測定字串的長度,字串的結束符是 0 size 這個名字...
CString 和 char 的轉換
cstring 是一種很特殊的 c 物件,它裡面包含了三個值 乙個指向某個資料緩衝區的指標 乙個是該緩衝中有效的字元記數 它是不可訪問的,是位於 cstring 位址之下的乙個隱藏區域 以及乙個緩衝區長度。有效字元數的大小可以是從0到該緩衝最大長度值減1之間的任何數 因為字串結尾有乙個null字元 ...
C string和char 的區別
1 定義 string string是c 標準庫 stl 中的型別,它是定義的乙個類,定義在 string 標頭檔案中。裡面包含了對字串的各種常用操作,它較 char 的優勢是內容可以動態拓展,以及對字串操作的方便快捷,用 號進行字串的連線是最常用的操作。char char 是乙個指向字元的指標,是...