VC常用資料型別使用轉換

2021-05-10 10:54:19 字數 2699 閱讀 9983

本文**自別人部落格,將介紹一些常用資料型別的使用。

我們先定義一些常見型別變數藉以說明

一、其它資料型別轉換為字串

短整型(int)

長整型(long)

浮點數(float,double)

用fcvt可以完成轉換,這是msdn中的例子:

執行結果:source: 3.1415926535 buffer: '31415927' decimal: 1 sign: 0

decimal表示小數點的位置,sign表示符號:0為正數,1為負數

cstring變數

bstr變數

ccombstr變數

_bstr_t變數

_bstr_t型別是對bstr的封裝,因為已經過載了=操作符,所以很容易使用

通用方法(針對非com資料型別)

用sprintf完成轉換

二、字串轉換為其它資料型別

短整型(int)

長整型(long)

浮點(double)

cstring變數

bstr變數

ccombstr變數

ccombstr型別變數可以直接賦值

_bstr_t變數

_bstr_t型別的變數可以直接賦值

三、其它資料型別轉換到cstring

使用cstring的成員函式format來轉換,例如:

整數(int)

浮點數(float)

字串指標(char *)等已經被cstring建構函式支援的資料型別可以直接賦值

對於format所不支援的資料型別,可以通過上面所說的關於其它資料型別轉化到char *的方法先轉到char *,然後賦值給cstring變數。

四、bstr、_bstr_t與ccombstr

ccombstr 是atl對bstr的封裝,_bstr_t是c++對bstr的封裝,bstr是32位指標,但並不直接指向字串的緩衝區。

char *轉換到bstr可以這樣:

反之可以使用

具體可以參考一,二段落裡的具體說明。

ccombstr與_bstr_t對大量的操作符進行了過載,可以直接進行=,!=,==等操作,所以使用非常方便。

特別是_bstr_t,建議大家使用它。

五、variant 、_variant_t 與 colevariant

variant的結構可以參考標頭檔案vc98/include/oaidl.h中關於結構體tagvariant的定義。

對於variant變數的賦值:首先給vt成員賦值,指明資料型別,再對聯合結構中相同資料型別的變數賦值,舉個例子:

對於不馬上賦值的variant,最好先用void variantinit(variantarg far* pvarg);進行初始化,其本質是將vt設定為vt_empty,下表我們列舉vt與常用資料的對應關係:

_variant_t是variant的封裝類,其賦值可以使用強制型別轉換,其建構函式會自動處理這些資料型別。

使用時需加上#include

例如:colevariant的使用與_variant_t的方法基本一樣,請參考如下例子:

六、其它一些com資料型別

根據progid得到clsid

根據clsid得到progid

...///可以使用pprogid

cotaskmemfree(pprogid);//不要忘記釋放

七、ansi與unicode

unicode稱為寬字元型字串,com裡使用的都是unicode字串。

將ansi轉換到unicode

(1)通過l這個巨集來實現,例如: clsidfromprogid( l"mapi.folder",&clsid);

(2)通過multibytetowidechar函式實現轉換,例如:

(3)通過a2w巨集來實現,例如:

將unicode轉換到ansi

(1)使用widechartomultibyte,例如:

(2)使用w2a巨集來實現,例如:

八、其它

對訊息的處理中我們經常需要將wparam或lparam等32位資料(dword)分解成兩個16位資料(word),例如:

對於16位的資料(word)我們可以用同樣的方法分解成高低兩個8位資料(byte),例如:

兩個16位資料(word)合成32位資料(dword,lresult,lparam,或wparam)

兩個8位的資料(byte)合成16位的資料(word)

從r(red),g(green),b(blue)三色得到colorref型別的顏色值

例如colorref bkcolor = rgb(0x22,0x98,0x34);

從colorref型別的顏色值得到rgb三個顏色值

九、注意事項

假如需要使用到convertbstrtostring此類函式,需要加上標頭檔案comutil.h,並在setting中加入comsupp.lib或者直接加上#pragma comment( lib, "comsupp.lib" )

VC常用資料型別使用轉換

我們先定義一些常見型別變數藉以說明 int i 100 long l 2001 float f 300.2 double d 12345.119 char username 女俠程佩君 char temp 200 char buf cstring str variant t v1 bstr t v2...

VC常用資料型別使用轉換詳解

剛接觸vc程式設計的朋友往往對許多資料型別的轉換感到迷惑不解,本文將介紹一些常用資料型別的使用。我們先定義一些常見型別變數藉以說明 int i 100 long l 2001 float f 300.2 double d 12345.119 char username 女俠程佩君 char temp...

VC常用資料型別使用轉換詳解

常用資料型別使用轉換詳解 讀者層次 初學 剛接觸vc程式設計的朋友往往對許多資料型別的轉換感到迷惑不解,本文將介紹一些常用資料型別的使用。我們先定義一些常見型別變數藉以說明 int i 100 long l 2001 float f 300.2 double d 12345.119 char use...