Friends who have just contacted VCs often confuse the conversion of many data types, this article will introduce some common data types.
Let's first define some common type variables to explain
INT i = 100; long L = 2001; float f = 300.2; double d = 12345.119; char username [] = "Female Jeruchan"; Char Temp [200]; char * buf; cstring str; _variant_t v1; _bstr_t v2;
First, other data types are converted to strings
Short integer (INT) ITOA (I, TEMP, 10); /// Transforms i into a string into TEMP, the last digit represents decimal ITOA (I, TEMP, 2); // Press binary to convert Long integer (LONG) LTOA (L, TEMP, 10);
Second, get a pointer to the string from other variables containing strings
CString variable str = "2008 Beijing Olympics"; BUF = (LPSTR) (LPCTSTR) Str; BSTR type _variant_t variable v1 = (_BSTR_T) "programmer"; buf = _com_util :: convertBSTRTSTRING ((_ bstr_t) v1);
Third, the string is converted to other data type STRCPY (TEMP, "123");
Short integer (int) i = ATOI (TEMP); long integer (long) L = atol (TEMP); Double) D = ATOF (TEMP)
Fourth, other data types are converted to CString using the member function format using CString, for example:
Integer (int) str.format ("% d", i); floating point number (FLOAT) Str.Format ("% f", i); string pointer (char *), etc. has been supported by the CString constructor Can be assigned directly STR = UserName;
Five, BSTR, _BSTR_T and CCOMBSTR
CCOMBSTR, _BSTR_T is package to BSTR, BSTR is a 32-bit pointer to a string. Char * Convert to BSTR can be like this: BSTR B = _com_util :: ConvertStringTobstr ("Data"); /// Use Need to add header files Comutil.h, you can use char * p = _com_util :: ConvertBSTRTOSTRING (B);
Sixth, Variant, _variant_t and Colevariant
Variant's structure can refer to the definition of struct tagvariant in the header file VC98 / include / OAIDL.H.
For the assignment of the variant variable: first assign a value to the VT member, specify the data type, and then assign a value of the same data type in the federation, take an example: Variant Va; int a = 2001; va.vt = vt_i4; // indicate Integer data va.lval = a; // / assignment
For Variant that doesn't assign a value right, it is best to use Void Variantinit (Variantarg Far * Pvarg); in the initialization, the essence is set to vt_empty, the following table lists the correspondence of VT and common data: 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 * B YREF; VT_BYREF
_Variant_t is a Variant's package class whose assignment can use forced type conversion, and its constructor automatically processes these data types. For example: long L = 222; ING I = 100; _variant_t lval (l); lval = (long) i;
The use of Colevariant is basically the same as _variant_t. Please refer to the following example: Colevariant V3 = "String", V4 = (long) 1999; CString Str = (BSTR) v3.pbstrval; long; long i = v4.lval;
Seven, other
In the processing of messages, we often need to decompose 32-bit data (DWORD) such as WPARAM or LPARAM to two 16-bit data (Word), for example: lparam lparam; Word Lovalue = Loword (LPARAM); /// Take 16 Word HiValue = HiWord (LPARAM); /// Take a 16-bit data for 16-bit data (Word) we can use the same method to decompose to two 8-bit data (byte), for example: