天天看点

VC++中字符串编码的转换

在以前vc++6.0中默认的字符集是多字节字符集(mbcs:multi-byte character set),而vs2005及以后默认的字符集是unicode,这样导致以前在vc6.0中非常简单实用的各类字符操作和函数在vs2010环境下运行时会报各种各样的错误。

字符集可以通过工程属性修改:“工程-属性-字符集”。

cstring在unicode和多字节字符集下的区别:cstring 是基于 tchar 数据类型的。如果为程序的生成定义了符号 _unicode,则会将 tchar 定义为 wchar_t 类型(一个 16 位的字符编码类型);否则,会将它定义为 char(普通的 8 位字符编码)。于是,在 unicode 下,cstring 由 16 位字符组成。如果没有 unicode,它们则由 char 类型的字符组成(来自msdn)。

以下是cstring在visual c++ .net 2010环境中unicode字符集下cstring和char *之间相互转换的几种方法,其实也就是unicode字符集与mbcs字符集转换。

1.unicode下cstring转换为char *

方法一: 使用api:widechartomultibyte进行转换

VC++中字符串编码的转换
VC++中字符串编码的转换

方法二:使用函数:t2a、w2a

2、unicode下char *转换为cstring

方法一:使用api:multibytetowidechar进行转换

VC++中字符串编码的转换
VC++中字符串编码的转换

方法二:使用函数:a2t、a2w

下面是在网上看到的转换代码,注意函数multibytetowidechar()和widechartomultibyte()第四个参数传入-1时表示第三个参数传入的字符串是null结尾的(null-terminated),这时候返回的字节数(字符数)就包含了null,详情看msdn。

VC++中字符串编码的转换
VC++中字符串编码的转换

参考:

<a href="http://msdn.microsoft.com/en-us/library/87zae4a3(v=vs.80).aspx">http://msdn.microsoft.com/en-us/library/87zae4a3(v=vs.80).aspx</a>

widechartomultibyte:

<a href="http://msdn.microsoft.com/en-us/library/windows/desktop/dd374130(v=vs.85).aspx">http://msdn.microsoft.com/en-us/library/windows/desktop/dd374130(v=vs.85).aspx</a>

multibytetowidechar:

<a href="http://msdn.microsoft.com/en-us/library/windows/desktop/dd319072(v=vs.85).aspx">http://msdn.microsoft.com/en-us/library/windows/desktop/dd319072(v=vs.85).aspx</a>

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

http://www.cnblogs.com/luxiaoxun/p/3454733.html