宽字符窄字符和通用字符
由于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;