最近打杂,在搞ansi版本转为unicode办。最主要的就是其中涉及到字符串那些函数了。做这些工作本来就是使用那些个多字节和宽字节直接的转换为主,还有就是将那些字符串函数用t版相应函数进行替换即可。不过这其中有一点是值得欣慰的就是CString的强大之处的。在这其中CString是一个很强大的类。这个要怎么说呢,在Unicode工程中Cstring中保存的数据是使用wchar类型的。ms出来提供CString还有CStringA和CStringW,它们的数据类型就不言而喻了。
这里我要将的一个就是宽字节和多字节之间的转换问题。它们直接的转换我们可以借用MultiBytesToWideChar和WideCharToMultiBytes进行。在大部分场合下,使用CString可以方便的做到多字节和宽字节的转换,我要说的意思就是Char类型字符串可以简单的赋值给给CString实例,而不用担心的是否会在CStirng实例中保存的是乱码。而CString赋值给CStringA的数据你也不要担心不能变成多字节的了。因为,CString有重载=,在赋值的使用会进行判断是否直接进行数据的拷贝,还是需要进行多字节和宽字节直接的转换。举个例子吧,假设现在的工程是unicode的,其中这样代码是这样。
CString a,b;
CStirngA c;
char d[] = "测试用abcd";
a = d;
c = a;
b = a;
上面简单的几句,直接的表达了我要说的问题。a =c 直接的赋值过程,在其中是有进行MultiByteToWideChar函数转换的。而在b=a的时候,并没有上面的转换,而是直接的数据拷贝操作。在c=a的过程也是一样的进行了WideCharToMultiByte的转换。不过需要注意的一点就在构造函数进行赋值是不可以的。如何判断当前的字符串是wchar还是char类型的呢。我没有自己的研究是否其中有什么标志。