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    实现窄字节转换到宽字节