刚开始程序中,1字符对于1个字节 多字节
引入中文后 1个字符对于对于多个字节(可能是1个也可能是2个甚至是3个,跟具体的字符有关) 宽字节 编码方式如Unicode utf-8 GBK。
前面的代码中,字符串前面必须要用宏TEXT()包起来。
在vs2015中默认编码方式为Unicode,也就是宽字节,如果直接按照下面的代码编码就会报错:
MessageBox("aaa");
因为"aaa"表示多字节,和宽字节的Unicode编码方式不符。
要将多字节转成宽字节,可以按照下面的方法编码,即加个L:
MessageBox(L"aaa");
那么TEXT()的作用是什么?
TEXT()的作用就是不管目标字符串的编码方式如何?它都将加进来的目标字符串转成编译器(这里是vs2015)配置的编码方式,这是一种自适应编码转换,另外,它还有两者形式 _T()宏和_TEXT()宏。
相关的,MFC中还有一种TCHAR类型的字符串,它也是自适应编码转换,推荐在MFC中使用。
相对于多字节求长度的strlen()方法,宽字节使用wcslen()方法。
char *和CSringr之间的转换:
char *p = "ccc";
CString str = CString(p3);
CString tmp = str;
char *pp = tmp.GetBuffer();