学习电脑,计算机系统故障维护,电脑技术,电脑知识学习-就上第二电脑网
当前位置: 首页 > 电脑知识 > 电脑基础

新电脑未识别的网络关于CString to char * 的一些见解

 更新时间: 2019-08-07 23:36:45   作者:第二电脑网   来源:第二电脑网   浏览数:118   我要评论

首先声明我不是一个高手,而是一个初学者,文章同样也是一个初学者对于CStig和cha*转换的理解。因为需要,接触C++一段时间了,其中最为困扰我的问题就是在使用C++的过程中CSti

首先声明我不是一个高手,而是一个初学者,文章同样也是一个初学者对于CString和char*转换的理解。

因为需要,接触C++一段时间了,其中最为困扰我的问题就是在使用C++的过程中CString和char*的转换,在网上搜索了一下,看到问这个问题的人挺多的。我使用的平台是Win2003+VC 2005,本来这个很简单的问题稍微复杂了一点在2005里面。

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

作为一个初学者,遇到这个问题,首先是在baidu上搜索了一下转换的方法,有很多结果,别人也说有效,但是我把它放在我的代码里面的时候,就是出现错误。下面是我的解决办法。

使用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 <stdlib.h>#include <iostream>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,这样,本文开头的那段代码就可以正确的执行了。

还有另个一种方法,你可以用这个函数去转换

void StringToChar(const CString s, char *Destination)

《新电脑未识别的网络关于CString to char * 的一些见解》总结了关于学习电脑常识教程,对于我们来www.002pc.com确实能学到不少知识。

{

int k=0;

wchar_t *inf = NULL;

inf = new wchar_t[50]; //可以按自己的要求加大点

wcscpy(inf,s);

k=WideCharToMultiByte(CP_ACP,0,inf,-1,NULL,0,NULL,0);

k=WideCharToMultiByte(CP_ACP,0,inf,k,Destination,k,NULL,0);

if(inf != NULL)

{

delete[]inf;

inf = NULL;

}

}


更多:新电脑未识别的网络关于CString to char * 的一些见解
https://www.002pc.com/diannaojichu/763.html

你可能感兴趣的char,CString,见解,关于,一些

    关于我们 - 广告合作 - 联系我们 - 免责声明 - 网站地图 - 投诉建议 - 在线投稿

      浙ICP备140365454号

    ©CopyRight 2008-2020 002pc.COM Inc All Rights Reserved. 第二电脑网 版权所有 联系QQ:282523118