以下是一些VC下的強(qiáng)制類型轉(zhuǎn)換的函數(shù)
一、字符串轉(zhuǎn)換
1.CString 轉(zhuǎn)化為整形Int
2.將一個(gè)CString轉(zhuǎn)到一個(gè)char的數(shù)組(char*)中
3.int 轉(zhuǎn) cstring
4.char * 轉(zhuǎn) CString
5.Float 轉(zhuǎn) CString
6.CString 轉(zhuǎn) Float
7.string 轉(zhuǎn) CString
8.char* 轉(zhuǎn) int
9.CString 轉(zhuǎn) string
10.int 轉(zhuǎn) char *
11.string 轉(zhuǎn) char *
12、CString to LPCSTR
13、CString to LPSTR
14、Char[] to int
15、Char[] to float
16、Char* to int
一、其它數(shù)據(jù)類型轉(zhuǎn)換為字符串
短整型(int)
itoa(i,temp,10);///將i轉(zhuǎn)換為字符串放入temp中,最后一個(gè)數(shù)字表示十進(jìn)制
itoa(i,temp,2); ///按二進(jìn)制方式轉(zhuǎn)換
長(zhǎng)整型(long)
ltoa(l,temp,10);
二、從其它包含字符串的變量中獲取指向該字符串的指針
CString變量
str = "2008北京奧運(yùn)";
buf = (LPSTR)(LPCTSTR)str;
BSTR類型的_variant_t變量
v1 = (_bstr_t)"程序員";
buf = _com_util::ConvertBSTRToString((_bstr_t)v1);
三、字符串轉(zhuǎn)換為其它數(shù)據(jù)類型
strcpy(temp,"123");
短整型(int)
i = atoi(temp);
長(zhǎng)整型(long)
l = atol(temp);
浮點(diǎn)(double)
d = atof(temp);
四、其它數(shù)據(jù)類型轉(zhuǎn)換到CString
使用CString的成員函數(shù)Format來(lái)轉(zhuǎn)換,例如:
整數(shù)(int)
str.Format("%d",i);
浮點(diǎn)數(shù)(float)
str.Format("%f",i);
字符串指針(char *)等已經(jīng)被CString構(gòu)造函數(shù)支持的數(shù)據(jù)類型可以直接賦值
str = username;
五、BSTR、_bstr_t與CComBSTR
CComBSTR、_bstr_t是對(duì)BSTR的封裝,BSTR是指向字符串的32位指針。
char *轉(zhuǎn)換到BSTR可以這樣: BSTR b=_com_util::ConvertStringToBSTR("數(shù)據(jù)");///使用前需要加上頭文件comutil.h
反之可以使用char *p=_com_util::ConvertBSTRToString(b);
六、VARIANT 、_variant_t 與 COleVariant
VARIANT的結(jié)構(gòu)可以參考頭文件VC98\Include\OAIDL.H中關(guān)于結(jié)構(gòu)體tagVARIANT的定義。
對(duì)于VARIANT變量的賦值:首先給vt成員賦值,指明數(shù)據(jù)類型,再對(duì)聯(lián)合結(jié)構(gòu)中相同數(shù)據(jù)類型的變量賦值,舉個(gè)例子:
VARIANT va;
int a=2001;
va.vt=VT_I4;///指明整型數(shù)據(jù)
va.lVal=a; ///賦值
對(duì)于不馬上賦值的VARIANT,最好先用Void VariantInit(VARIANTARG FAR* pvarg);進(jìn)行初始化,其本質(zhì)是將vt設(shè)置為VT_EMPTY,下表我們列舉vt與常用數(shù)據(jù)的對(duì)應(yīng)關(guān)系:
unsigned char bVal; VT_UI1
short iVal; VT_I2
long lVal; VT_I4
float fltVal; VT_R4
double dblVal; VT_R8
VARIANT_BOOL boolVal; VT_BOOL
SCODE scode; VT_ERROR
CY cyVal; VT_CY
DATE date; VT_DATE
BSTR bstrVal; VT_BSTR
IUnknown FAR* punkVal; VT_UNKNOWN
IDispatch FAR* pdispVal; VT_DISPATCH
SAFEARRAY FAR* parray; VT_ARRAY|*
unsigned char FAR* pbVal; VT_BYREF|VT_UI1
short FAR* piVal; VT_BYREF|VT_I2
long FAR* plVal; VT_BYREF|VT_I4
float FAR* pfltVal; VT_BYREF|VT_R4
double FAR* pdblVal; VT_BYREF|VT_R8
VARIANT_BOOL FAR* pboolVal; VT_BYREF|VT_BOOL
SCODE FAR* pscode; VT_BYREF|VT_ERROR
CY FAR* pcyVal; VT_BYREF|VT_CY
DATE FAR* pdate; VT_BYREF|VT_DATE
BSTR FAR* pbstrVal; VT_BYREF|VT_BSTR
IUnknown FAR* FAR* ppunkVal; VT_BYREF|VT_UNKNOWN
IDispatch FAR* FAR* ppdispVal; VT_BYREF|VT_DISPATCH
SAFEARRAY FAR* FAR* pparray; VT_ARRAY|*
VARIANT FAR* pvarVal; VT_BYREF|VT_VARIANT
void FAR* byref; VT_BYREF
_variant_t是VARIANT的封裝類,其賦值可以使用強(qiáng)制類型轉(zhuǎn)換,其構(gòu)造函數(shù)會(huì)自動(dòng)處理這些數(shù)據(jù)類型。
例如:
long l=222;
ing i=100;
_variant_t lVal(l);
lVal = (long)i;
COleVariant的使用與_variant_t的方法基本一樣,請(qǐng)參考如下例子:
COleVariant v3 = "字符串", v4 = (long)1999;
CString str =(BSTR)v3.pbstrVal;
long i = v4.lVal;
七、其它
對(duì)消息的處理中我們經(jīng)常需要將WPARAM或LPARAM等32位數(shù)據(jù)(DWORD)分解成兩個(gè)16位數(shù)據(jù)(WORD),例如:
LPARAM lParam;
WORD loValue = LOWORD(lParam);///取低16位
WORD hiValue = HIWORD(lParam);///取高16位
對(duì)于16位的數(shù)據(jù)(WORD)我們可以用同樣的方法分解成高低兩個(gè)8位數(shù)據(jù)(BYTE),例如:
WORD wValue;
BYTE loValue = LOBYTE(wValue);///取低8位
BYTE hiValue = HIBYTE(wValue);///取高8位
后記:本文匆匆寫成,錯(cuò)誤之處在所難免,歡迎來(lái)信指正。
int ->str itoa,atoi
double- str ftoa,atof
_bstr_t,_variant_t,CString,long 等等看看下面:
我給你點(diǎn)詳細(xì)的例子,看下面
先看懂_variant_t與_bstr_t這兩個(gè)類的構(gòu)造函數(shù)和 operator=
里面有重載了很多情況,
其他類型向_variant_t 賦值:
_variant_t( ) throw( );
_variant_t( const VARIANT& varSrc ) throw( _com_error );
_variant_t( const VARIANT* pVarSrc ) throw( _com_error );
_variant_t( const _variant_t& var_t_Src ) throw( _com_error );
_variant_t( VARIANT& varSrc, bool fCopy ) throw( _com_error );
_variant_t( short sSrc, VARTYPE vtSrc = VT_I2 ) throw( _com_error );
_variant_t( long lSrc, VARTYPE vtSrc = VT_I4 ) throw( _com_error );
_variant_t( float fltSrc ) throw( );
_variant_t( double dblSrc, VARTYPE vtSrc = VT_R8 ) throw( _com_error );
_variant_t( const CY& cySrc ) throw( );
_variant_t( const _bstr_t& bstrSrc ) throw( _com_error );
_variant_t( const wchar_t *wstrSrc ) throw( _com_error );
_variant_t( const char* strSrc ) throw( _com_error );
_variant_t( bool bSrc ) throw( );
_variant_t( IUnknown* pIUknownSrc, bool fAddRef = true ) throw( );
_variant_t( IDispatch* pDispSrc, bool fAddRef = true ) throw( );
_variant_t( const DECIMAL& decSrc ) throw( );
_variant_t( BYTE bSrc ) throw( );
operator=的重載形式:
_variant_t& operator=( const VARIANT& varSrc ) throw( _com_error );
_variant_t& operator=( const VARIANT* pVarSrc ) throw( _com_error );
_variant_t& operator=( const _variant_t& var_t_Src ) throw( _com_error );
_variant_t& operator=( short sSrc ) throw( _com_error );
_variant_t& operator=( long lSrc ) throw( _com_error );
_variant_t& operator=( float fltSrc ) throw( _com_error );
_variant_t& operator=( double dblSrc ) throw( _com_error );
_variant_t& operator=( const CY& cySrc ) throw( _com_error );
_variant_t& operator=( const _bstr_t& bstrSrc ) throw( _com_error );
_variant_t& operator=( const wchar_t* wstrSrc ) throw( _com_error );
_variant_t& operator=( const char* strSrc ) throw( _com_error );
_variant_t& operator=( IDispatch* pDispSrc ) throw( _com_error );
_variant_t& operator=( bool bSrc ) throw( _com_error );
_variant_t& operator=( IUnknown* pSrc ) throw( _com_error );
_variant_t& operator=( const DECIMAL& decSrc ) throw( _com_error );
_variant_t& operator=( BYTE bSrc ) throw( _com_error );
有了以上兩個(gè)函數(shù),舉個(gè)例子:
double f=1.0
_variant_t v;
v=f;
CString str="ddd"
_variant_t v;
v=str.AllocSysString() 或者v=(_bstr_t)(char*)str;
即可
_variant_t轉(zhuǎn)換成別的形式
你首先必須確定你要轉(zhuǎn)化成什么樣的形式
double f;
_variant_t v
f=v.dblVal 即可或者f=(double)v;也可以
附:_variant_t的操作符
operator short( ) const throw( _com_error );
operator long( ) const throw( _com_error);
operator float( ) const throw( _com_error );
operator double( ) const throw( _com_error );
operator CY( ) const throw( _com_error );
operator bool( ) const throw( _com_error );
operator DECIMAL( ) const throw( _com_error );
operator BYTE( ) const throw( _com_error );
operator _bstr_t( ) const throw( _com_error );
operator IDispatch*( ) const throw( _com_error );
operator IUnknown*( ) const throw( _com_error );
1 string 2 CString
2 CString 2 string
string str(CString.GetBuffer(str.GetLength()));
3 string 2 char *
char *p=string.c_str();
4 char * 2 string
string str(char*);
5 CString 2 char *
strcpy(char,CString,sizeof(char));
6 char * 2 CString
CString.format("%s",char*);
CString的format方法是非常好用的。string的c_str()也是非常常用的,但要注意和char *轉(zhuǎn)換時(shí),要把char定義成為const char*,這樣是最安全的。
************************************************************************************************
1. char* to string
string s(char *);
注:在不是初始化的地方最好用assign().
?。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。?!
2. string to const char*
string a="strte";
const char* r=a.c_str();
注意是const的。還要轉(zhuǎn)到char*:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2.2. const char* to char*
const char* r="123";
char
strcpy(p1,r);
附:http://hi.baidu.com/cfans/blog/item/06970ef4b671f366dcc4745d
··············································································
·······························
3. cstring to string
vs2005 Unicode下:
非Unicode下:
CString cs("test");
std::string str=cs.getBuffer(0);
cs.ReleaseBuffer();
注:GetBuffer()后一定要ReleaseBuffer(),否則就沒(méi)有釋放緩沖區(qū)所占的空間.
++++++++++++++++++++++++++++++++++++++++++++++++++++
4. double ,int to string
#include <sstream>
using namespace std;
stringstream ss;
string result;
long n=11111;
stream << n; //從long型數(shù)據(jù)輸入
stream >>result; //轉(zhuǎn)換為 string
===================================================
5.char*
char *s; double x; int i; long l;
s = " -2309.12E-15";
x = atof( s );
printf( "atof test: ASCII string: %s\tfloat: %e\n", s, x );
s = "7.8912654773d210";
x = atof( s );
printf( "atof test: ASCII string: %s\tfloat: %e\n", s, x );
s = " -9885 pigs";
i = atoi( s );
printf( "atoi test: ASCII string: %s\t\tinteger: %d\n", s, i );
s = "98854 dollars";
l = atol( s );
printf( "atol test: ASCII string: %s\t\tlong: %ld\n", s, l );
------------------------------------------------------------------------------------------------
6. string to int ,long ,double
——————————————————————————————————————————
7. date to string
#include <time>
using namespace std;
char dateStr [9];
char timeStr [9];
printf( "The current date is %s \n", dateStr);
_strtime( timeStr );
printf( "The current time is %s \n", timeStr);
--------實(shí)踐證明是正確的版本--------------------------------------------------------------
#include <iostream>
#include <ctime>
#include <cerrno>
int main()
{
}
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
8.string to cstring
+++++++++++++++++++++++++++++++++++++++++++++++++++++
非Unicode下:
int 轉(zhuǎn) CString:
CString.Format("%d",int);
...............................
string 轉(zhuǎn) CString
CString.format("%s", string.c_str());
用c_str()確實(shí)比data()要好.
.......................................
char* 轉(zhuǎn) CString
CString.format("%s", char*);
.....................................................
CString 轉(zhuǎn) int
...................................................................................................................................
9.在Unicode下的CString to double
CSting sTemp("123.567");
double dTemp = _wtof(sTemp.GetString());
二、數(shù)值處理
1、浮點(diǎn)數(shù)取整方法
聯(lián)系客服