c++字符串数据类型 与字符集的一些规律
字符集分类
如果按照字符集来对字符串的数据类型进行分类,大概分为以下三种
Ansi:
char、char*、const char*
CHAR、PCHAR、PSTR、LPSTR、LPCSTR
Unicode:(宽字节)
wchar_t、wchar_t*、const wchar_t*
WCHAR、PWCHAR、PWSTR、LPCWSTR
T通用性
TCHAR、TCHAR*、PTCHAR、PTSTR、LPTSTR、LPCTSTR
解释:
L表示long指针(旧的机器有区别,新机器有没有L都一样了),
P表示这是一个指针
C表示是一个常量
STR表示这个变量是一个字符串
W表示宽字节
T表示通用类型,_T宏会根据编译器的字符集自动选择定义类型
字符串类型的对象的定义
Ansi:
char *pstr="hello";
Unicode:
wchar_t *pStr=L"hello";
通用类型:
TCHAR * pTStr=_T("hello"); //或 TCHAR * pTStr=_TEXT("hello");
动态申请内存:
TCHAR *p = new TCHAR[100];
取字符串长度:
取文本长度函数区别:不同类型的字符集,取字符串长度所用的函数也不同,如果强转数据类型 即使编译通过,结果也是不对的
以下函数不需要都记住 只需要知道一种 需要的时候可以通过MSDN查询其中一个 一般都会有其他字符集的相应函数
Ans求字符串长度: strlen(char *str)
Unicode求字符串长度: wcslen(wchar_t *str);
通用函数求字符串长度: _tcslen(TCHAR *str) ;
Ansi 字符串到数值: int atoi(const char *str);
Unicode:字符串到数值: int_wtoi(const wchar_t *str)
通用函数:字符串到数值: _tstoi(const TCHAR *str);
Ansi 字符串拷贝: strcpy(char * strDestination,const char *strSource);
Unicode 字符串拷贝: wcscpy(wchar_t * strDestination,const wchar_t *strSource)
通用函数 字符串拷贝: _tcscpy(TCHAR *strDestination,const, size_t numberOfElements,const TCHAT *strSource )
Ansi占用字节数:
char str[]=”abc”;
sizeof(str);
char *psz=”aaaaa”;
strlen(psz)*sizeof(char);
Unicode占用字节数:
wchar_t szwStr[]=L”aaa”;
sizeof(szwstr);
wchtr_t *pwsz =L”aaaa”
wcslen(pwsz)*sizeof(wchtr_t);
通用函数占用字节数:
TCHAR szstr[]=_T(“aaa”);
sizeof(szstr)
TCHAR *psz=T(“aaa”);
_tcslen(psz)*sizeof(TCHAR);
转换用到的最基本的API函数
WideCharToMultiByte 实现宽字节转换到窄字节
MultiByteToWideChar 实现窄字节转换到宽字节