~$ 存档

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

一、LPSTR LPCSTR LPTSTR LPCTSTR等

确定的类型:
LPSTR = CHAR * = char *
LPCSTR = const CHAR * = char *  //c意为const 
不确定类型(可变型):
LPTSTR = LPWSTR = WCHAR * = wchar_t * //(Unicode编码)
= LPSTR  = CHAR *  = char *  //(多字节编码) 

TCHAR  = wchar_t //Unicode编码
= char    //多字节编码  

二、CString与char *

  • 多字节环境:CString等价于const char *,因此,在const char *的参数下可以直接使用CString,但是不能用于char *。

例:

void show(const char * name)
{
    AfxMessageBox(name);
}    
.........

CString name("luotian");
show(name); //可以通过

CString可以智能化
在多字节环境下无论怎么赋值都是ASCII编码,比如:CString a(L"luotian"),加上L修饰,CString依然将它进行ASCII编码。
在Unicode环境下,无论怎么赋值都是Unicode编码,比如:CString a("luotian"),不加L修饰依然可以通过。

  • CString与LPCTSTR

在函数参数需要LPTSTR,LPCTSTR等等时,CString变量可以直接使用.

//例如:在Unicode环境下:
CString a("Luotian");
MessageBox(a);
  • CString->LPTSTR

//强制类型转换
CString a("Luotian");
LPTSTR p = (LPTSTR)(LPCTSTR)a;

//用CString的GetBuffer()方法
LPTSTR p = a.GetBuffer();
  • LPTSTR->CString

可以直接赋值操作.

三、char * 与 wchar_t *的互换(重点

  • ASCII->Unicode

LPSTR source ="Luotian";//源串
size_t len = strlen(source) + 1;
size_t converted = 0;
LPTSTR dest= (LPTSTR)malloc(len*sizeof(WCHAR));
 
mbstowcs_s(&converted,dest,len,source,_TRUNCATE);  
  • Unicode->ASCII
#define WChar2Char(lpWideCharStr,cbWideChar,lpMultiByteStr,cbMultiByte) \
WideCharToMultiByte(CP_ACP, 0, lpWideCharStr, cbWideChar, lpMultiByteStr, cbMultiByte, NULL, NULL)
例:
WChar2Char(source,-1,dest,cb字节数);
TCHAR dest[256];
LPCWSTR source=L"Luotian";
WChar2Char(source, -1, dest, 256);

四、string和wstring

  • string->const char *(LPCSTR)和wstring->const wchar_t * (等价于LPCTSTR)

//采用.c_str()方法;
string a("Luotian");
const char * p = a.c_str();
  • char * p->string

char * p = "luotian";
string a=p;
//string和CString的一个区别在于:函数参数需要LPTSTR时,CString可以直接用,而string不行。

 

posted on 2016-11-19 18:09  LuoTian  阅读(607)  评论(0编辑  收藏  举报