一些有用的轉換

2021-08-24 22:24:56 字數 4551 閱讀 5177

relation with conversion

1. wchar / tchar:

widechartomultibyte()

wcstombs()

cstring()

atl macros: ole2a(),w2t(),w2ct(),lstrcpy()

note: #include

swprintf(wchar,l"%ls",char);

wcscpy(wchar,l"activedesktop");

2. guid、systemtime、bstr、char*和cstring轉換

(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);

(8) guid轉換成 cstring

示例**如下:

cstring getguid() //取得唯一標示

{ bstr a;

a=sysallocstring(l" ");

hresult hr;

guid g;

hr=::cocreateguid(&g);

int ret=stringfromguid2(g,a,39); /

cstring c(a);

return c;

(9) cstring轉換成systemtime

示例**如下:

_variant_t temp = "04-17-2007";

temp.changetype(vt_date);

varianttimetosystemtime(temp.date,&systemtime); // systemtime為轉換後的系統時間

(10) systemtime轉換成cstring

示例**如下:

systemtime st;

char buf[80];

getsystemtime(&st); //獲得當前系統時間

getdateformat(locale_system_default,

0,&st,

"dd/mm/yyyy", //轉換年月日

buf,

sizeof(buf));

cstring time = buf;

gettimeformat(locale_user_default,

0,&st,

null,

buf,

sizeof(buf)); //轉換時間

time += " ";

cstring temp1 = buf;

time += temp1; //time最終格式為 [日/月/年 時間]

一些有用的函式

1.memset pbuffer,0,pbuffer length 初始化一段記憶體空間,初始值為0 2.sprintf pbuffer,fomatstring,作用和printf差不多,不同的是輸出到指定的快取pbuffer中,而不是輸出到dos控制台。3.sscanf pbuffer,fomat...

SQL 一些有用的語句

得到當前時間格式為 yyyymmdd select convert varchar 10 getdate 112 獲取兩位年,兩位月。declare yymm varchar 8 if month getdate 10 set yymm right year getdate 2 0 convert ...

一些有用的SQL語句

說明 複製表 只複製結構,源表名 a 新錶名 b sql select into b from a where 1 1 說明 拷貝表 拷貝資料,源表名 a 目標表名 b sql insert into b a,b,c select d,e,f from b sql select a.title,a....