宽窄字符串转换

宽字符窄字符和通用字符

由于vs下的编程有unicode和ascci这些大体上的区别,所以建议在进行windows编程的时候采用通用类型来处理。windows通过代码编译判断来处理。

C语言版本窄字符集char char*const char *
C语言宽字符集 wchar_t wchar_t* cosnt wchar_t*
windows下窄字符集 CHAR PCHAR,PSTR,LPSTR LPCSTR
windows下宽字符集 WCHAR PWCHART,PWSTR,LPWSTR LPCWSTR
T 通用类型 TCHAR TCHAR *,PTCHAR,PTSTR,LPTSTR LPCTSTR

变量:

char * p_s = "123";
wchar_t *p_w = L"123";
TCHAR *p_t = _T("789")
//_T是一个宏定义针对vs的不同字符集有不同的处理操作,对于宽字符集就是宽字符集,L是宽字符集的意思

字符串处理函数:

直接和char *字符串做类比:

strlen 等等

宽字符集就是把str编程wcs

通用字符集就是把str变成_tcs

char * p_s = "123";
wchar_t *p_w = L"123";
TCHAR *p_t = _T("789")

int a_len = strlen(p_s);
int w_len = wcslen(p_w);
int t_len = _tcslen(p_t);

 

API函数

WideCharToMultiByte 实现宽字节转换到窄字节

 

int WideCharToMultiByte(
UINT CodePage,
DWORD dwFlags,
LPCWSTR lpWideCharStr,
int cchWideChar,
LPSTR lpMultiByteStr,
int cbMultiByte,
LPCSTR lpDefaultChar,    
LPBOOL lpUsedDefaultChar
);

MultiByteToWideChar 实现窄字节转换到宽字节

 

int MultiByteToWideChar(  
UINT CodePage,
DWORD dwFlags,        
LPCSTR lpMultiByteStr,
int cbMultiByte,
LPWSTR lpWideCharStr,  
int cchWideChar
);

 

使用类来处理

这个用API函数来处理着实麻烦Windows下定义了CA2W和CW2A两个类来 处理。

    char* p_c = (char *)"123";
wchar_t* p_w = (wchar_t*)L"aaaa";
CA2W a(p_c);
p_w = (wchar_t*)a;
CW2A b(p_w);
p_c = (char*)b;