打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
不能将参数 1 从const char [*]转换为LPCWSTR

 [2014/10/07 0:29]其解决方案就是, 将项目->属性->配置属性->常规->项目默认值下面的字符集换为:使用多字节字符集

    原因:

    1.了解ANSI和Unicode编

    1、ANSI(即MBCS):为多字节字符集,它是不定长表示世界文字的编码方式。ANSI表示英文字母时就和ASCII一样,但表示其他文字时就需要用多字节。比如处理英文字符时使用单字节方式,在处理中文字符时使用双字节方式。对于ANSI编码方式,存在不同的字符集(Charset)。同样的字节序列,在不同的字符集下表示的字符不一样。要正确解析一个ANSI字符串,还要选择正确的字符集,否则就可能导致所谓的乱码现象。每个字符集都有一个唯一的编号,称为代码页(Code Page)。简体中文(GB2312)的代码页为936,而系统默认字符集的代码页为0,它表示根据系统的语言设置来选择一个合适的字符集。

    2、Unicode:用两个字节表示一个字符的编码方式。比如字符'A'在ASCII下面用一个字节表示,而在Unicode下面用两个字节表示,其中高字节用“0”填充。'程'在ASCII下面用两个字节表示,而在Unicode下面也是用两个字节表示。Unicode的用处就是定长表示世界文字,据统计,用两个字节可以编码现存的所有文字而没有二义。

    Unicode和ANSI的区别就相当于输入法内的“全角”和“半角”的区别。由于不同 ANSI 编码所规定的标准是不相同的(字符集不同),因此,对于一个给定的多字节字符串,我们必须知道它采用的是哪一种字符集则,才能够知道它包含了哪些“字符”。而对于 UNICODE 字符串来说,不管在什么环境下,它所代表的“字符”内容总是不变的。Unicode 有着统一的标准,它定义了世界上绝大多数的字符的编码,使得拉丁文、数字、简体中文、繁体中文、日文等都能以同一种编码方式保存。

    2.Windows下的两种编码

    Windows下的序设计可以支持ANSI和Unicode两种编码方法的字符串,具体使用哪种就要看定义了MBCS宏还是Unicode宏。MBCS宏对应的字符串指针为LPSTR(即char*),Unicode对应的指针为LPWSTR(即unsigned char*)。为了写程序的方便,微软定义了类型LPTSTR,在MBCS下它表示char*,在Unicode下它表示unsigned char*,这就可以重定义一个宏进行不同字符集的转换了

        3.关系 

    LPSTR:    指向一个字符串的32位指针,相当于char *;
    LPCSTR:  指向一个常量字符串的32位指针,相当于const char *;
    LPWSTR: 指向一个Unidoce字符串的32位指针,相当于wchar_t *;
    LPCWSTR:指向一个常量Unicode字符串的32位指针,相当于const wchar_t*。

       4.宏_T和_L

    常量字符串ANSI和Unicode的区分是由宏_T来决定的.
    _T是一个适配宏。当定义了_UNICODE时,_T和L相同;否则,_T的字符串采用ANSI编码方式。示例如下:

  1. LPTSTR lptStr=new TCHAR[32];  
  2. TCHAR* szBuf=_T("Hello");  

    以上两个语句,无论是在ANSI编码方式,还是在Unicode编码方式下都是正确的。
    L表示字符串资源采用Unicode编码方式,示例如下:
   
  1. wchar_t Str[]=L"Hello World!"//每个字符都用2个字节来存储  

    如下是从MFC库中拷来的:

  1. #ifdef UNICODE  
  2.     typedef LPWSTR LPTSTR;  
  3.     typedef LPCWSTR LPCTSTR;  
  4. #else  
  5.     typedef LPSTR LPTSTR;  
  6.     typedef LPCSTR LPCTSTR;  
  7. #endif  

       5.相互转换方法

    LPWSTR->LPTSTR:                          W2T(); 
    LPTSTR->LPWSTR:                          T2W(); 
    LPCWSTR->LPCSTR:                       W2CT(); 
    LPCSTR->LPCWSTR:                       T2CW();
    ANSI->UNICODE:                          A2W();
    UNICODE->ANSI:                          W2A();



本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
带你玩转Visual Studio——带你理解多字节编码与Unicode码
“const char*”类型的实参与LPCTSTR类型的形参不兼容
Unicode 和多字节字符集 (MBCS) 支持
ANSI与Unicode编码,TCHAR | LPSTR | LPCSTR | LPWSTR | LPCWSTR | LPTSTR | LPCTSTR 的含义
LPWSTR,LPCTSTR,LPTSTR
宽字符与多字符集(LPTSTR、LPCSTR、LPCTSTR、LPSTR)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服