VC++ 基础知识

1.符号就不多说明了 :: 作用域分辨符;. 访问类成员 ;-> 指针用之。

2.琳琅满目的类型:

  
  LPSTR          32-bit指针,指向一个字符串
  LPCTSTR       32-bit指针,指向一个常数字符串,此字符串可移植到Unicode和DBCS(双字节字集),指向每字符16字节的const类型字符串的指针
  LPTSTR         32-bit指针,指向一个字符串,此字符串可移植到Unicode和DBCS(双字节字集),指向每字符16字节的字符串的指针.
  LPCSTR         32-bit指针,指向一个常数字符串,指向每字符8字节的const类型字符串的指针。
  LPWSTR         以\0结束的Unicode字符串,即双字节

 

  在Windows数据类型中有以下描述:  
  Windows   Data   Types       
  LPCSTR   :   Pointer   to   a   constant   null-terminated   string   of   8-bit   Windows   (ANSI)   characters.    
  LPCTSTR   :     An   LPCWSTR   if   UNICODE   is   defined,   an   LPCSTR   otherwise.    
  LPCWSTR   :   Pointer   to   a   constant   null-terminated   string   of   16-bit   Unicode   characters.      
  LPTSTR   :   An   LPWSTR   if   UNICODE   is   defined,   an   LPSTR   otherwise.    
  LPSTR   :   Pointer   to   a   null-terminated   string   of   8-bit   Windows   (ANSI)   characters.      
  LPWSTR   :   Pointer   to   a   null-terminated   string   of   16-bit   Unicode   characters.    

 

  CHAR   8bit  ansi字符
  WCHAR 16bit unicode字符
  TCHAR 如果定义了UNICODE宏(#def UNICODE),TCHAR 等同于WCHAR ,如果没有定义unicode宏,
  TCHAR 等同于CHAR  

 

  LPCSTR:  等价于   const   char   *   只读ANSI字符串指针  
  CString:  MFC中对字符串的包装的类,可以是ANSI也可以是Uncode  
  char*     ANSI字符串指针  
  char[]    ANSI字符数组,可以当成指针字符串来使用  
  CHAR     等价于char,单个ANSI字符

 

  L("Hello")   表示转换成宽字符,用以支持Unicode

3.类型转换: 

Decimal Conversions

Decimal To Hex

// Use _itoa( ) function and set radix to 16.

char hexstring[10]; 
int number = 30;
itoa( number, hexstring, 16);

// In hexstring is 1e.

Hex To Decimal

// You can use strtol function and you can specify base. 

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

//  A function that does this

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

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

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

CString strValue,strInt, strDecimal;
int decimal,sign;
double dValue = 4.125;
strValue = _fcvt(dValue,6,&decimal,&sign); 
    // Now decimal contains 1 because there is 
    // only one digit before the .

strInt = strValue.Left(decimal); // strInt contains 4
strDecimal = strValue.Mid(decimal); // strDecimal contains 125

CString strFinalVal;
strFinalVal.Format("%s.%s",strInt,strDecimal); 
    // strFinalVal contains 4.125

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;

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 <ANSIAPI.H>
#include <comdef.h>
_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;

nValue = atoi(MyArray);

Char array to float

char MyArray[20];
float fValue;

fValue = atof(MyArray);

Char Pointer to double

char *str = " -343.23 "; 
double dVal; 
dVal = atof( str );

Char Pointer to integer

char *str = " -343.23 "; 
int iVal;
iVal = atoi( str );

Char Pointer to long

char *str = "99999"; 
long lVal; 
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; //Converting from float to WORD. 
    //The value in wVar would be 247

wVar = 247;
fVar = (float)fVar; //Converting from WORD to float. 
    //The value in fVar would be 247.00

 

 

 

 

   

posted @ 2008-09-08 12:25  winzheng  阅读(1558)  评论(3编辑  收藏  举报