CString和char*转换的理解

CString和char*转换的理解

  CString和char*转换因为需要,用VC做windows窗体的界面,在C的函数中有不少是使用char*作为参数的,因此有一个必不可少的步骤就是把CString转换为shar*字符串。

    使用CString的GetBuffer方法 CString origCString(“Hello,World”); char* CharString = origCString.GetBuffer(origCString.GetLength()+1); 网上的很多文章说的都是这个方法,但是我在VC++2005中编译得到下列信息 :

    Error 1 error C2440: ‘initializing’ : cannot convert from ‘wchar_t *’ to ‘char *’

对于这个错误不是很理解,因为是刚开始使用VC不久,所以对于wchar_t和char的区别不是很清楚,在MSDN中查看了一下,wchar_t是一个宽字符型,相当于unsigned short(16bit)。而我们通常使用的char是8bit。

    继续搜索wchar_t*到char*的转换,msdn上面有一篇文章是Convert Between Various String Types,讲了VC++2005中的各种字符串char *, wchar_t*, _bstr_t, CComBSTR, CString, basic_string, and System.String的相互转换。其中将wchar_t*转换为char*的代码如下:(为了保持文章的一致性,修改了变量名)

#include #include using namespace std;

int main()

{ wchar_t *origString = L”Hello,World”;

 wcout << origString << endl; // Convert to a char*

size_t origsize = wcslen(origString) + 1;

const size_t newsize = 100;

size_t convertedChars = 0;

char CharString[newsize];

wcstombs_s(&convertedChars, CharString, origsize, origString , _TRUNCATE);

cout << CharString << endl;

}

输出正确,均为Hello, World! 结合上面的两段,看看能不能将CString转换为char*

CString origCString(“Hello, World!”);

wchar_t* wCharString = origCString.GetBuffer(origCString.GetLength()+1);

size_t origsize = wcslen(wCharString) + 1;

size_t convertedChars = 0;

char *CharString;

CharString=new char(origsize);

wcstombs_s(&convertedChars, CharString, origsize, wCharString , _TRUNCATE);

cout << CharString << endl;

成功输出字符串”Hello,World” 至于为什么原来的那段代码别人都能用好,而我在VC++2005下面去不能直接使用,还要通过转换呢?正好看到《Programming Windows》的第二章讲Unicode的和在msdn论坛问了一下相关问题后得到答案。 原来在VC++ 2005以前,应用程序默认都是关闭对Unicode的支持的,而在VC2005中,默认打开了对它的支持,CString对应的字符串应该是TCHAR,TCHAR的定义是这样的, #ifdef _UNICODE typedef wchar_t TCHAR ; #else typedef char TCHAR; #endif 我想这个就是为什么我在VC++2005种不能直接转换的原因。在工程中应该可以关闭对于Unicode的支持,从而可以直接转换。这个做法是右击工程名—〉Property—〉General中的character set中选择not set,这样,本文开头的那段代码就可以正确的执行了。

自己的说的: 其实就是 unicode 和 ANSI编码的问题参考http://www.regexlab.com/zh/encoding

转载于:https://www.cnblogs.com/cwbo-win/p/3338502.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/110006.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm怎么安装python_pycharm环境配置教程

    pycharm怎么安装python_pycharm环境配置教程1.pycharm的下载,到pycharm官方网站进行下载点击tools选择自己要下载的pycharm的版本2.下载完成安装以后如图所示:创建一个快捷方式,以便打开3.根据安装的提示一步一步往下走就可以了4.Python下载:4.1到Python官网下载Python我下载的是3.9.6版本的Python4.2安装时记得点击path的那个选项,这样就不用了自己去环境那边配置了4.3安装完成以后,在命令提示行下检查一下是否安装成功…

    2022年8月27日
    6
  • Idea2025.1.1.1激活码教程永久有效激活码绝对有效2025.1.1.1

    Idea2025.1.1.1激活码教程永久有效激活码绝对有效2025.1.1.1Idea 激活码教程永久有效 2025 1 1 1 激活码教程 Windows 版永久激活 持续更新 Idea 激活码 2025 1 1 1 成功激活

    2025年5月21日
    13
  • 旁路由设置的正确方式

    旁路由设置的正确方式最近在玩旁路由,踩了一些坑,也学习了点相关知识,特整理记录下。一、旁路由的配置上图是旁路由的连接方式,一般作为旁路由的只有一个LAN口,可以把它想成一个普通的连接路由器的电脑。让他们ip在一个网段即可,比如主路由网关192.168.3.1,旁路由配置成192.168.3.21.主路由配置:DHCP配置,把网关和DNS改成旁路由ip地址,如192.168.3.2。2.旁路由配置:关闭DHCP,把网关改成主路由地址,如192.168.3.1,关闭桥接模式。这样配置后,网络流量如下图:.

    2022年6月14日
    56
  • NorthWind 数据库「建议收藏」

    NorthWind 数据库「建议收藏」NorthWind数据库Categories:产品类别;Customers:客户;Employees:雇员EmployeesTerritories:员工涉及领域OrderDetails:订单明细Orders:订单Products:产品Region:地区Shippers:运货商Suppliers:供应商Territories:地域    在NorthWind

    2025年8月24日
    7
  • Centos7:用户不再sudoers文件中[通俗易懂]

    Centos7:用户不再sudoers文件中[通俗易懂]Centos7使用sudo提示用户不在sudoers文件中的解决方法:步骤:1)切换到root用户[linux@localhost~]$suroot密码:[root@localhost~]#2)查看/etc/sudoers文件权限,如果只读权限,修改为可写权限[root@localhost~]#ll/etc/sudoers-r–r—–.1root…

    2022年6月20日
    92
  • python encode和decode函数说明[通俗易懂]

    python encode和decode函数说明[通俗易懂]字符串编码常用类型:utf-8,gb2312,cp936,gbk等。python中,我们使用decode()和encode()来进行解码和编码在python中,使用unicode类型作为编码的基础类型

    2022年7月1日
    40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号