Thursday, December 9, 2010

Data Conversions C++

How to: Convert Between Various String Types

// -- Decimal Conversions

// Decimal To Hex
// Use _itoa( ) function and set radix to 16. In hexstring is 1e.
char hexstring[10];
int number = 30;
itoa( number, hexstring, 16);

// Hex To Decimal
char * hexstring= "ABCDEF";
char * p;
int number = strtol(hexstring, &p,16);

bool HexToDecimal (char* HexNumber, int& Number)
{
 char* pStopString;
 Number = strtol (HexNumber, &pStopString, 16);
 return (bool)(Number != LONG_MAX);
}

// Decimal to time
char *DecToTime(float fTime, char *szTime)
{
 int nHrs, nMin, nSec;
 fTime *= 3600;
 nHrs = (int)fTime / 3600;
 nMin = (int)(fTime - nHrs * 3600) / 60;
 nSec = (int)(fTime - nHrs * 3600 - nMin * 60);
 wsprintf(szTime, "%02d.%02d.%02d Hrs.Min.Sec.", nHrs, nMin, nSec);
 return szTime;
}

// -- String Conversions

// String to Hex
// where string = your string and
// 04 = length of your string and X = hex
sscanf(string, %04X, &your_word16);

// Hex to CString
CString Str;
unsigned char Write_Buff[1];
Write_Buff[0] = 0x01;
Str.Format("0x0%x",Write_Buff[0]);

// COleVariant to CString
CString strTemp;
COleVariant Var;
Var = "FirstName";
strTemp = Var.bstrVal;
AfxMessageBox(strTemp);

// CString to char pointer
CString MyString = "ABCDEF";
char * szMyString = (char *) (LPCTSTR) MyString;

char *pBuffer = new char[1024];
CString strBuf = "Test";
pBuffer = strBuf.GetBuffer(sizeof(pBuffer));

// char pointer to CString
char * mystring = "12345";
CString string = mystring;

// Double to CString including the fractional part
// Now decimal contains 1 because there is
// only one digit before the "."
// strFinalVal contains 4.125
CString strValue,strInt, strDecimal;
int decimal,sign;
double dValue = 4.125;
strValue = _fcvt(dValue,6,&decimal,&sign);
strInt = strValue.Left(decimal); // strInt contains 4
strDecimal = strValue.Mid(decimal); // strDecimal contains 125
CString strFinalVal;
strFinalVal.Format("%s.%s",strInt,strDecimal);

// Double To CString
CString strValue;
int decimal,sign;
double dValue = 123456789101112;
strValue = _ecvt(dValue,15,&decimal,&sign);

// CString To Double
strValue = "121110987654321";
dValue = atof(strValue);

// CString to LPCSTR
CString str1 = _T("My String");
int nLen = str1.GetLength();
LPCSTR lpszBuf = str1.GetBuffer(nLen);
// here do something with lpszBuf...........
str1.ReleaseBuffer();

// CString to LPSTR
CString str = _T("My String");
int nLen = str.GetLength();
LPTSTR lpszBuf = str.GetBuffer(nLen);
// here do something with lpszBuf...........
str.ReleaseBuffer();

// CString to WCHAR*
CString str = "A string here" ;
LPWSTR lpszW = new WCHAR[255];

LPTSTR lpStr = str.GetBuffer( str.GetLength() );
int nLen = MultiByteToWideChar(CP_ACP, 0,lpStr, -1, NULL, NULL);
MultiByteToWideChar(CP_ACP, 0, lpStr, -1, lpszW, nLen);
AFunctionUsesWCHAR( lpszW );
delete[] lpszW;

// WCHAR* to MultyByte
LPCWSTR pTexFilename;
char Filename[MAX_PATH];
WideCharToMultiByte( CP_ACP, 0, pTexFilename, lstrlenW( pTexFilename ), Filename, MAX_PATH, 0, 0 );

// LPTSTR to LPWSTR
int nLen = MultiByteToWideChar(CP_ACP, 0, lptStr, -1, NULL, NULL);
MultiByteToWideChar(CP_ACP, 0, lptStr, -1, lpwStr, nLen);

// string to BSTR
string ss = "Girish";
BSTR _bstr_home = A2BSTR(ss.c_str());

// CString to BSTR
CString str = "whatever" ;
BSTR resultsString = str.AllocSysString();

// _bstr_t to CString
#include
#include
_bstr_t bsText("Hai Bayram");
CString strName;
W2A(bsText, strName.GetBuffer(256), 256);
strName.ReleaseBuffer();
AfxMessageBox(strName);

char szFileName[256];
GetModuleFileName(NULL,szFileName,256);
AfxMessageBox(szFileName);

// -- Character arrays

// Char array to integer
char MyArray[20];
int nValue = atoi(MyArray);

// Char array to float
char MyArray[20];
float fValue = atof(MyArray);

// Char Pointer to double
char *str = " -343.23 ";
double dVal = atof( str );

// Char Pointer to integer
char *str = " -343.23 ";
int iVal = atoi( str );

// Char Pointer to long
char *str = "99999";
long lVal = atol( str );

// Char* to BSTR
char * p = "whatever";
_bstr_t bstr = p;

// Float to WORD and Vice Versa
float fVar;
WORD wVar;
fVar = 247.346;
wVar = (WORD)fVar;

wVar = 247;
fVar = (float)fVar; //Converting from WORD to float.

// Float/Double/Int to char*
float fnum=123.5f;
char ctemp[255];
sprintf( ctemp, "%g", fnum );

// WCHAR* to CHAR*
WCHAR temp=L"Hello World";
char ctemp[255]={};
WideCharToMultiByte(CP_ACP,0,temp,sizeof(temp),ctemp,255*sizeof(ctemp),0,0);

// CHAR* to WCHAR*
char* ctemp = "Hello World";
WCHAR temp[255];
MultiByteToWideChar( CP_ACP, 0, ctemp, -1, temp, 255*sizeof(temp) );

No comments:

Post a Comment