char、wchar_t、ACHAR、WCHAR、TCHAR

最近用到上面几种不同的字符类型,下面贴上在网上收集到的资料。 

1、char

单字节变量类型,最多表示256个字符。

2、wchar_t

宽字节变量类型,用于表示Unicode字符,它实际定义在<string.h>里:typedef unsigned short wchar_t。 

定义宽字节类型方法如下:

wchar_t c = `A ' ;
wchar_t * p = L " Hello! " ;
wchar_t a[]
= L " Hello! " ;

其中,宽字节类型每个变量占用2个字节。

 

3、ACHAR

此类型是AUTODESK公司在AdAChar.h 头文件中定义的,当定义了AD_UNICODE(AUTODESK公司使用UNICODE宏)时为wchar_t。

4、WCHAR

在头文件中有这样的定义:typedef wchar_t WCHAR; 所以WCHAR实际就是wchar_t。 

5、TCHAR

 如果定义了UNICODE宏则TCHAR被定义为wchar_t,typedef wchar_t TCHAR; 否则TCHAR被定义为char typedef char TCHAR;

6、string、wstring
        string和wstring均定义在string头文件中,其中string类型变量中每个单元为char型字符,wstring为wchar_t型字符。

7、相互转化

//char* to string :
char *a = "abcde";
string str = a;

//string to char*
char *a = str.c_str();

//wchar_t* to wstring
wchar_t *b = L"abcde";
wstring wstr
= b;

//wstring to wchar_t*
wchar_t *b = wstr.c_str();

 

//ACHAR to string

 string ACharToString(const ACHAR * inAchar)

{

int len = (int)wcslen(inAchar);

string strBuffer;
 int nCopied = WideCharToMultiByte(CP_OEMCP,WC_COMPOSITECHECK,inAchar,len,NULL,0,NULL,NULL );

 if( nCopied <= 0 )
  return strBuffer;
 strBuffer.resize( nCopied );
 WideCharToMultiByte(CP_OEMCP,WC_COMPOSITECHECK, inAchar,len,const_cast<LPSTR>(strBuffer.data()),nCopied,NULL,NULL);
 return strBuffer;

}

 

// string to ACHAR

ACHAR * StringToAChar(const string inString)

{

const char* orig = inString.c_str();
 size_t origsize = strlen(orig) + 1; 
 size_t convertedChars = 0;

 ACHAR *wcstring = (ACHAR *)malloc(origsize*2+1);
 mbstowcs_s(&convertedChars, wcstring, origsize, orig, _TRUNCATE);
 return wcstring;

} 

 

//string to wstring
wstring stringToWstring(const std::string& s)

{


 setlocale(LC_ALL, "chs");
 const char* _Source = s.c_str();
 size_t _Dsize = s.size() + 1;
 wchar_t *_Dest = new wchar_t[_Dsize];
 wmemset(_Dest, 0, _Dsize);
 mbstowcs(_Dest,_Source,_Dsize);
 std::wstring result = _Dest;
 delete []_Dest;
 setlocale(LC_ALL, "C");
  return result;

 

//wstring to string 

string wStringToString(const std::wstring& ws)

{

 std::string curLocale = setlocale(LC_ALL, NULL);     
 setlocale(LC_ALL, "chs");
 const wchar_t* _Source = ws.c_str();
 size_t _Dsize = 2 * ws.size() + 1;
 char *_Dest = new char[_Dsize];
 memset(_Dest,0,_Dsize);
 wcstombs(_Dest,_Source,_Dsize);
 std::string result = _Dest;
 delete []_Dest;
 setlocale(LC_ALL, curLocale.c_str());

 return result;

}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值