string,char*及CString类型的相互转换

首先先介绍一下什么是CString

CString是MFC的字符串类,它不是基本类型,而是对字符串的封装,它是自适应的,在UNICODE环境下就是CStringW,在非UNICODE环境下就是CStringA。

如从对话框中利用 GetWindowText 得到的字符串就是 CString 类型, CString 定义在头文件中。CString(typedef CStringT> CString) 为 Visual C++ 中最常用的字符串类,

继承自 CSimpleStringT 类,主要应用在 MFC 和 ATL 编程中,所以使用 CString 时要包含 afx.h 文件#include 。

一:char*与string:

1.string----->char*

  1)char *ch = str.c_str();

  2)char* ch = str.data();

  3)string mngName;

     char t[200];

     memset(t,0,200);

     strcpy(t,mngName.c_str());

2.char*----->string

  1)string s1 = ch;

  2)string str = string(ch);

  3)string str(ch);

  在不是初始化的地方最好还是用assign().

二:char*与CString:

1.CString----->char*:

  1)CString cstr="Hello Word!";

      char* ch=cstr.getbuffer(cstr.length());

2char*----->CString:直接赋值或者格式化即可

  1) CString cStr1 = ch;

  2) CString cStr2 = CString(ch);

  3)CString cStr2(ch);

  但是,如果数组中有中文话,在Unicode环境下就会出现乱码。这时要么进行转换,要么可以如下方法:CString str(ch);或者 CString str = ch.c_str();

3.CString-----> char[100]:

  1)char a[100];

     CString str("aaaaaa");

   strncpy(a,(LPCTSTR)str,sizeof(a));

  2)CString str="aaa";

     char* ch;

   ch=(char*)(LPCTSTR)str;

三:string与CString:

1.string----->CString

   string s,s1,s2,s3;

      CString cstr2,cstr;

  1) str = CString(s); //直接复制丢给构造会自己转换

2) CString cstr(s1.c_str());

  3)cstr2.Format("%s", s2.c_str());

  4)cstr2.Format("%s", s3.data());

2.CString----->string

  CString类型变量可以直接给string类型变量赋值,但是string类型不能对CString类型直接赋值。

  CString cStr = "adsad",cstr3;

  1)string str = cStr;

  2)str=cstr3.GetBuffer(0);  GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.

   str.ReleaseBuffer();

  3)str = LPCSTR(cstr);

https://technet.microsoft.com/zh-cn/w6w3kbaf(zh-tw).aspx

https://technet.microsoft.com/zh-cn/ms235389

附:LPCSTR解释

类型理解
  LPCTSTR类型:
  L表示long指针 这是为了兼容Windows 3.1等16位操作系统遗留下来的,在win32中以及其他的32位操作系统中, long指针和near指针及far修饰符都是为了兼容的作用。没有实际意义。
  P表示这是一个指针
  C表示是一个常量
  T表示在Win32环境中, 有一个_T宏
  STR表示这个变量是一个字符串

详细释义

这个宏用来表示你的字符是否使用UNICODE, 如果你的程序定义了UNICODE或者其他相关的宏,那么这个字符或者字符串将被作为UNICODE字符串,否则就是标准的ANSI字符串。
  所以LPCTSTR就表示一个指向常固定地址的可以根据一些宏定义改变语义的字符串。
  在程序中我们大部分时间要使用带T的类型定义。
  LPCTSTR == const TCHAR *(TCHAR is wchar_t )
  CString 和 LPCTSTR 可以说通用。 原因在于CString定义的自动类型转换,没什么奇特的,最简单的C++操作符重载而已。
  常量字符串ansi和unicode的区分是由宏_T来决定的。但是用_T("abcd")时, 字符串"abcd"就会根据编译时的是否定一_UNICODE来决定是char* 还是 w_char*。 同样,TCHAR 也是相同目的字符宏。 看看定义就明白了。

原文地址:https://www.cnblogs.com/tianzeng/p/9080516.html

时间: 2024-10-10 04:24:38

string,char*及CString类型的相互转换的相关文章

C++ string 与 int 等类型 的相互转换

看到网上有许多关于这个的实现,而且会涉及到细节的处理.为了以后方便的使用,在此提供可以直接可以使用的函数. 参考资料: 1:讲解C++ stringstream(细节):http://blog.csdn.net/leonardwang/article/details/4881122 2:C++模板(很详细,有例子):http://www.cnblogs.com/gaojun/archive/2010/09/10/1823354.html 1 #include <iostream> 2 #inc

String类型和Date类型的相互转换

1 import java.text.DateFormat; 2 import java.text.ParseException; 3 import java.text.SimpleDateFormat; 4 5 6 //String--->Date 7 String str1 = "2011-5-31 14:40:50"; 8 DateFormat df = DateFormat.getDateInstance(); 9 Date date; 10 try { 11 date

CString, string, char *之间的相互转换(转)

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Date: 2018.09.02 1. string→CString CString.format("%s", string.c_str()); 2. CString→string string str(CString.GetBuffer(str.GetLength(

C++ 中 string, char*, int 类型的相互转换

1.string到int的转换 1) 在 C 标准库里面,使用 atoi: #include <cstdlib> #include <string> std::string text = "152"; int number = std::atoi( text.c_str() ); if (errno == ERANGE) //可能是std::errno { //number可能由于过大或过小而不能完全存储 } else if (errno == ????) //

类型转换 - CString,int,string,char*之间的转换

<C++标准函数库>中说的 有三个函数可以将字符串的内容转换为字符数组和C—string 1.data(),返回没有”\0“的字符串数组 2,c_str(),返回有”\0“的字符串数组 3,copy() ................................................................. int 转 CString: CString.Format("%d",int); ..............................

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 ->

C++string,char* 字符数组,int类型之间的转换

string.int 常见类型之间相互转换 int & string 之间的转换 C++中更多的是使用流对象来实现类型转换 针对流对象 sstream实现 int,float 类型都可以实现 #include <sstream> //int convert to string void int2str(const int &int_temp,string &string_temp){ stringstream s_stream; s_stream<<int_

VC CString,int,string,char*之间的转换

1 CString,int,string,char*之间的转换 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(CStr