今天看项目代码中的字符串都在字符串的前面加上了L,顿时比较纳闷,在网上查了一下,知道前面加L的字符串叫做宽字符串,宽字符串和普通字符串的区别在于普通字符串是用ANSI ASCii编码,所以每个字符的大小都是一个byte。但是由于ASCii只是适合美国的文字,而世界上其他国家的文字则没办法显示,所以后面有了unicode编码,unicode编码是用2个byte来表示一个字符,所以可以表示65536个字符,远大于普通字符的表示范围。

在C++中,宽字符串和普通字符串的主要区别是宽字符串的size是普通字符串size的一倍,在普通字符串中加上L(比如L“abc”)就可以成为宽字符串。同时宽字符串的数据结构也与普通字符串的不同,常规情况是在前面加上w,比如string类型对应宽字符串的string是wstring,cout对应宽字符串的输出是wcout等等。对于字符数组则有一定的不同,普通字符用char表示,宽字符则用wchar_t表示。

下面讲两种字符串转换的方式:

(1)首先是普通字符串转换成宽字符串。

最简单的方式是普通字符串前面加上L即可;可以利用CString类的AllocSysString()函数来将普通字符串转换成宽字符串。

(2)宽字符串转换成普通字符串

只能利用<stdlib.h>中定义的宽字符串到多字节字符串的C语言转换函数:

size_t wcstombs( char *mbstr, const wchar_t *wcstr, size_t count )