CString string char* char 之间的字符转换(多种方法)

在写程序的时候,我们经常遇到各种各样的类型转换,比如 char* CString string 之间的互相转换。首先解释下三者的含义。

CString 是一种很有用的数据类型。它们很大程度上简化了MFC中的许多操作(适用于MFC框架),使得MFC在做字符串操作的时候方便了很多。需要包含头文件#include <afx.h>。

C++中的string用于便是字符串,功能比较强大。要想使用标准C++中string类,必须要包含#include <string>// 注意是<string>,不是<string.h>,带.h的是C语言中的头文件。

Char * 专门用于指以‘\0‘为结束的字符串。

以下方法来进行转换:

<span style="font-size:18px;">// CharConvert.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
#include<afx.h>
#include<string>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
	//<strong>此方法适用于“多字节” 否则会出现'strcpy' : cannot convert parameter 2 from 'unsigned short *' to 'const char *'</strong>
	/*CString str("Hello zzu");
	cout<<"the CString is "<<str<<endl;
	char a[100];
	strcpy(a,str);
	cout<<"the convert to char * is "<<a<<"(char *)"<<endl;*/

	<strong>//CString 转换成string</strong>
	//   CString c_str1("Hello Zhengzhou University");
	//string str;
	//str=c_str1.GetBuffer(0);
	//c_str1.ReleaseBuffer();   //否则就没有释放缓冲区所占的空间
	//cout<<str<<endl;
	//cout<<"\n"<<c_str1<<endl;

	<strong>//string 转换成CString</strong>
	/*string str1("Hello College of Information Engineering");
	CString c_str2;
	c_str2=str1.c_str();  //c_str():生成一个const char*指针,指向以空字符终止的数组。
	cout<<"the CString is "<<c_str2<<endl;
	cout<<"the string  is "<<str1<<endl;*/

	<strong>//string转换成const char*</strong>
	//方法一:
	//string str2("Hello College of Information Engineering");
	//const char * str3;   //常数指针
	//str3=str2.c_str();
	//cout<<"string    is   "<<str2<<endl;
	//cout<<"const char is  "<<str3<<endl;

	//方法二:
	//  /* string str("Hello College of Information Engineering");
	//const char * c_str;
	//c_str=str.data();
	//cout<<"string is    "<<str<<endl;
	//cout<<"const char is"<<c_str<<endl;*/

	<strong>//string 直接转换成char*</strong>
	///*string s1 = "abcdefg";
	//char *data;
	//int len = s1.length();
	//data = (char *)malloc((len)*sizeof(char));
	//s1.copy(data,len,0);
	//cout<<len<<endl;
	//cout<<data<<endl;*/

	<strong>//string.copy()的用法</strong>
	//size_t length;
	//   char buffer[8];
	//  string str("Test string......");
	//  length=str.copy(buffer,7,6);       //从buffer6,往后数7个,相当于[ buffer[6], buffer[6+7] )
	//  buffer[length]='\0';                        //加上'\0'使得buffer就到buffer[length]为止;
        //  cout <<"buffer contains: " << buffer <<endl;
	//char * 转换成string

	<strong>//char *到string</strong>
	/* char * c_str="zzu";
	string str(c_str);
	cout<<"the c_str  "<<c_str<<endl;
	cout<<"the string is"<<str<<"and length is "<<str.length()<<endl;*/

	<strong>//char * 到CString</strong>
	////char * c_str1="zzu";
	////CString  str;  //可以直接转换,因为CString存在重载(在多字节字符集下适用)
	////str.Format("%s",c_str1);
	////cout<<"the c_str1  is"<<c_str1<<endl;
	////cout<<"the CString is"<<str<<endl;

	//使用API:WideCharToMultiByte进行转换(使用过,有效)
	//CString str= CString("This is an example!");
	//int n = str.GetLength(); //按字符计算,str的长度
	//int len = WideCharToMultiByte(CP_ACP,0,str,n,NULL,0,NULL,NULL);//按Byte计算str长度
	//char *pChStr = new char[len+1];//按字节为单位
	//WideCharToMultiByte(CP_ACP,0,str,n,pChStr,len,NULL,NULL);//宽字节转换为多字节编码
	//  pChStr[len] = '\0';//不要忽略末尾结束标志
	//用完了记得delete []pChStr,防止内存泄露
	return 0;
}</span>
<span style="font-size:18px;"></span><p><span style="white-space:pre">	</span><span style="color:#ff0000;">同时需要注意的是,我们在平成写程序时,最好搞清我们的编译环境中的编码方式,不同的编码方式可以会导致一些字符转换失败,当我们编程开始,就要想好在哪个编码方式下进行,以免最后出现换编码方式了,代码却出现很多错误(很让人头疼),比如sqlite数据库中的中文字符乱码问题就是由于编码方式和数据库中默认的编码方式不一致。这点在我们写程序时一定谨记。</span></p>
时间: 2024-07-30 09:38:39

CString string char* char 之间的字符转换(多种方法)的相关文章

MFC中cstring,string和char[]的相互转化

int 转 CString:CString.Format("%d",int);...............................string 转 CString CString.format("%s", string.c_str()); 用c_str()确实比data()要好. .......................................char* 转 CString CString.format("%s", cha

C++ 11特性中string与数字之间的互相转换

在写C++时经常会遇到字符串string与int等数字之间的相互转化,在java这种语言特性特别丰富的语言中能够通过Integer和String包装类中的函数parseInt和valueOf等函数轻松转换,而在C++中一直没有特别好的处理办法. 在之前的经历中,我都是通过C++中的字符串流stringstream来进行转换的,即通过如下函数: 1 int str2int(string input){ 2 stringstream ss; 3 ss<<input; 4 int res; 5 ss

C++ 将 std::string 转换为 char*

参考: std::string to char* C++ 将 std::string 转换为 char* 目前没有直接进行转换的方法.必须通过string对象的c_str()方法,获取C-style的字符串: std::string str = "string"; const char *cstr = str.c_str(); 注意,该方法返回的类型为const char *,不能直接修改返回的C-style字符串,若需要修改则必须先拷贝该字符串: std::string str =

通过编写串口助手工具学习MFC过程&mdash;&mdash;(三)Unicode字符集的宽字符和多字节字符转换

通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个串口助手再次熟悉一下MFC,并做了一下记录,以便方便以后查阅.做的过程中多是遇到问题直接百度和谷歌搜索来的,所以很多都是不求甚解,知其然不知其所以然.另外做此工具只是为了熟悉了解,许多功能还没有完善!(开发工具VS2008) (三)Unicode字符集的宽字符和多字节字符转换 在上一节<(二)通过&qu

CString string char* 之间的转换

下面是MFC/C++/C中字符类型CString, int, string, char*之间的转换的说明与举例,经常用的东西,相信对于用C/C++的朋友,还是比较有用的 string,CString,char*之间的转化 int 转 CString: CString.Format("%d",int); ............................... string 转 CString  CString.format("%s", string.c_str

CString,int,String,char,BSTR之间的转换

String 转 CString CString.format("%s", string.c_str()); char 转 CString CString.format("%s", char*); char 转 string string s(char *); string 转 char * char *p = string.c_str(); CString 转 string string s(CString.GetBuffer()); 1. String ->

mfc CString,string,char* 之间的转换

知识点: CString转char*,string string转char*,CString char* 转CString,string 一.CString转char*,string //字串转换测试 CString CString1; std::string string1; CHAR* char1=NULL; //1 string1=CString1.GetBuffer(); CString1.ReleaseBuffer(); //2 char1=CString1.GetBuffer();

转:char*, char[] ,CString, string的转换

转:char*, char[] ,CString, string的转换 (一) 概述 string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳入C++标准之中: CString(typedef CStringT > CString)为Visual C++中最常用的字符串类,继承自CSimpleStringT类,主要应用在MFC和ATL编程中,主要数据类型有char(应用于ANSI),wchar_t(unicode),TCHAR(ANSI与unicod

string 与char* char[]之间的转换

string 与char* char[]之间的转换,有需要的朋友可以参考下. 1.首先必须了解,string可以被看成是以字符为元素的一种容器.字符构成序列(字符串).有时候在字符序列中进行遍历,标准的string类提供了STL容器接口.具有一些成员函数比如begin().end(),迭代器可以根据他们进行定位. 注意,与char*不同的是,string不一定以NULL('\0')结束.string长度可以根据length()得到,string可以根据下标访问.所以,不能将string直接赋值给