wchar_t,char,string,wstring等的总结

本文详细介绍了C++中各种字符类型的转换方法,包括不同字符指针间的转换、CString与其他字符类型间的转换,以及string和wstring之间的转换。同时给出了具体的示例代码。

一、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不行。

 

转载于:https://www.cnblogs.com/tinaluo/p/6081165.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值