vc字符串

•ANSI:ASCII码,每个字符占用1个字节,可以表示128个字符。能表示所有英文字符,但不适用于非英文字符集。例如”ABC”占用4个连续字节。
•MBCS:多字节码,对ANSI标准字符,仍用一个字节表示,但对非ANSI标准字符,用两个字节表示,且两个字节最高位都为1。该编码方式能表示任何一种语言的常用文字,但各地编码方式不统一。例如”中文ABC”占用8个连续字节。
•UNICODE:统一码,每个字符用2个字节表示,可以为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。例如”中文ABC”占用12个连续字节。
•在VCIDE开发环境中,使用如下条件编译使用不同的字符集:
–无编译选项,使用ANSI字符集
–_MBCS,使用MBCS字符集
–_UNICODE,使用UNICODE字符集
•ASCII字符:char,CHAR

  charc = ‘a’;  //占一个字节

•Unicode字符:wchar_t,WCHAR

  WCHARc = L’a’;  //占两个字节

•通用字符:TCHAR,使用宏_UNICODE在宽窄字符集之间灵活切换

  TCHARc = _T(‘a’);

•ANSI字符串:char*,CHAR*, PSTR, PCSTR, LPSTR, LPCSTR

  char*str = “abc”;  //内存数据为61626300

  char*str = “中文abc”; //使用MBCS码

•Unicode字符串:wchar_t*,WCHAR*, PWSTR, PCWSTR, LPWSTR, LPCWSTR

  WCHAR*str = L”abc”  //内存数据为  //6100620063000000

  WCHAR*str = L”中文abc”; //使用UNICODE码

•通用字符串:TCHAR*,PTSTR, PCTSTR, LPTSTR, LPCTSTR

  TCHAR*str =_T(“中文abc”);//根据平台自动选择

  //字符集

•BSTR字符串:BSTR是一个有长度前缀和null结束符的OLECHAR数组。BSTR的前4字节是一个表示字符串长度的前缀。BSTR长度域的值是字符串的字节数,并且不包括0结束符。这种字符串主要用于COMinterface接口定义以及与VB等语言混合编程。

  BSTRstr = _bstr_t(“abc”);//内存数据为

  //060000006100620063000000


字符串类:
•std::string:ATL中封装char*的字符串类。
•std::wstring: ATL中封装WCHAR*的字符串类。
•CString:MFC中封装TCHAR*的字符串类。
•CComBSTR:ATL中封装BSTR的字符串类。
•_bstr_t: BSTR的封装类,相当于一个带有引用计数的智能指针。
字符串转化:

•char*与WCHAR*之间转换

WCHAR*AnsiToUnicode(const char* szStr)

{

  int nLen = MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED, szStr, -1,NULL, 0);

  if(nLen ==0) return NULL;

  wchar_t* pResult =new wchar_t[nLen];

  MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED, szStr, -1,pResult, nLen);

  returnpResult;

}

char*UnicodeToAnsi(const WCHAR* szStr)

{

  int nLen = WideCharToMultiByte(CP_ACP,0, szStr, -1,NULL, 0, NULL, NULL);

  if(nLen ==0) return NULL;

  char*pResult =new char[nLen];

  WideCharToMultiByte(CP_ACP,0, szStr, -1,pResult, nLen,NULL, NULL);

  returnpResult;

}

•char*与WCHAR*之间转换(cont.)

  WCHAR*pszW = L”abc”;

  CW2ApszA(pszW);

  char*str = pszA.m_psz;

  char*pszA = ”abc”;

  CA2WpszW(pszA);

  WCHAR*str = pszW.m_psz;

类似的用法还有,CW2T、CA2T、CT2W、CT2A等。

•char*与BSTR之间转换

  BSTRstr1 = _com_util::ConvertStringToBSTR("abc");

  char*str2 = _com_util::ConvertBSTRToString(str1);

•char*与std::string之间转换

  #include<string>

  std::stringstr1("abc");

  std::stringstr2 = "abc";

  char*str =(char*)str1.c_str();

  WCHAR*与std::wstring之间转换类似处理。

•TCHAR*与CString之间转换

  CStringstr1(_T("abc"));

  CString str2= _T("abc");

  TCHAR*str3 =str1.GetBuffer(10);

  int sizeOfBuffer = s.GetAllocLength();

  _tcscpy_s(pBuffer, sizeOfBuffer,_T("Hello"));

  str1.ReleaseBuffer();

  LPCTSTRstr4 = str1;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值