char*、string、CString各种字符串之间转换

参考博客:

http://blog.csdn.net/luoweifu/article/details/20242307

http://blog.csdn.net/luoweifu/article/details/20232379

<string> <string.h><cstring>的区别

<string.h>

<string.h>是C版本的头文件,包含比如strcpy、strcat之类的字符串处理函数。

<cstring>

在C++标准化(1998年)过程中,为了兼容以前,标准化组织将所有这些文件都进行了新的定义,加入到了标准库中,加入后的文件名就新增了一个"c"前缀并且去掉了.h的后缀名,所以string.h头文件成了cstring头文件。但是其实现却是相同的或是兼容以前的,这就是<cstring>的来源,不要觉得又多了一个东西。相当于标准库组织给它盖了个章,说“你也是我的标准程序库的一份子了”。

<string>

<string>是C++标准定义的头文件,它定义了一个string的字符串类,里面包含了string类的各种操作,如s.size(), s.erase(), s.insert()等。但<string>又包含了老的C版本的字符串操作如strcpy、strcat等,这就相当于,在<string>的文件中除了定义自己的string类之外,还加了一个#include<string.h>一句包含了C版本的字符串操作。

没有<cstring.h>这样的头文件。

string:

string是C++标准库(STL)中的类型,它是定义的一个类,定义在<string>头文件中。里面包含了对字符串的各种常用操作,它较char*的优势是内容可以动态拓展,以及对字符串操作的方便快捷,用+号进行字符串的连接是最常用的操作。

CString

CString常用于MFC编程中,是属于MFC的类,如从对话框中利用GetWindowText得到的字符串就是CString类型,CString定义在<afx.h>头文件中。CString(typedef CStringT> CString)为Visual C++中最常用的字符串类,继承自CSimpleStringT类,主要应用在MFC和ATL编程中,所以使用CString时要包含afx.h文件#include <afx.h>。

 

char*

char*是一个指向字符的指针,是一个内置类型。可以指向一个字符,也可以表示字符数组的首地址(首字符的地址)。我们更多的时候是用的它的第二的功能,来表示一个字符串,功能与字符串数组char ch[n]一样,表示字符串时,最后有一个 ‘\0‘结束符作为字符串的结束标志。

Char* 转 CString

char *ch = "char pointer to CString";

CString cStr1 = ch;

CString cStr2 = CString(ch);

CString 转 Char*   

         CString cstr = "CString to char point";

char* chs = cstr.GetBuffer(0);//此方法在unicode下编译不通过

 

char* 转 string

    char * ch = "char point to string";

string s1 = ch;   //直接初始化或赋值

string s2(ch), s3;

s3 = string(ch);

string 转 char*

string str = string("string to char point");

/*************************************************************************

其实没有很大的必要将string转换成char*,因为string可以直接当成字符数组来使用,

即通过下标来访问字符元素,如str[1]表示第1个字符‘t‘

**************************************************************************/

const char *ch1 = str.c_str();

string 转 CString

    string s1 = "string1 to CString";

string s2 = "string2 to CString";

string s3 = "string3 to CString";

CString cstr(s1.c_str());

CString cstr2, cstr3

//c_str()和data()区别是:前者返回带‘/0‘的字符串,后者则返回不带‘/0‘的字符串.

cstr2.Format("%s", s2.c_str());    // string to CString

cstr3.Format("%s", s3.data()); // string to CString

CString 转 string

CString cstr3 = "CString to string3";

CString cstr4 = "CString to string4";

string str;

str = cstr3.GetBuffer(0);    //此方法在unicode下编译不通过

str = LPCSTR(cstr4);         //此方法在unicode下编译不通过

//注解:以上测试都是在多字节编码下,若是在Unicode编码下则CString 相当于双字(宽字节WCHAR和wstring)

时间: 2024-08-04 15:58:31

char*、string、CString各种字符串之间转换的相关文章

Python: 在Unicode和普通字符串之间转换

Unicode字符串可以用多种方式编码为普通字符串, 依照你所选择的编码(encoding): <!-- Inject Script Filtered --> Toggle line numbers 1 #将Unicode转换成普通的Python字符串:"编码(encode)" 2 unicodestring = u"Hello world" 3 utf8string = unicodestring.encode("utf-8") 4

Python——在Unicode和普通字符串之间转换

1.1. 问题 Problem You need to deal with data that doesn't fit in the ASCII character set. 你需要处理不适合用ASCII字符集表示的数据. 1.2. 解决 Solution Unicode strings can be encoded in plain strings in a variety of ways, according to whichever encoding you choose: Unicode

reverse_string(char *string)递归实现字符串翻转

函数实现之前 先看一个例子 void fun(int i) { if (i > 0) fun(i / 2); printf("%d ",i); } int main(void) { fun(10); return 0; } 输出结果是什么? 这是<c语言深度剖析>中的一个例子  在这个例子中 printf("%d ",i):语句是fun函数的一部分 必定执行一次fun函数,就要打印一次.函数展开过程如下: void fun(int i) { //f

String,Integer,int类型之间转换总结

今天学习了封装的知识理念,关于自动装箱和拆箱等手段来改变数据类型感到十分有意思,同时之间的相互转换也值得我们去牢记,当然,在工作中熟能生巧,只是为了梳理一下知识点,供大家参考: 自java7以后已经实现了自动装箱和自动拆箱,int和Integer之间的转换已经可以实现自动 下面是实际的操作代码 1 public class Integer04{ 2 public static void main(String[] args){ 3 //int--->Integer 4 Integer i1=In

二进制数据和字符串之间转换

1.把二进制数据编码为base64格式 你有一个byte[]用于表示一些二进制信息,比如图像,你需要把这些数据编码为一个字符串,以便可以通过不适合二进制的方式(比如电子邮件)发送它. 可以使用Convert类的静态方法Convert.ToBase64String,把byte[]编码为string public static string Base64EncodeBytes(this byte[] inputBytes) { return Convert.ToBase64String(inputB

C# 字节数组和十六进制字符串之间转换的另类写法

今天从http://www.cnblogs.com/NanaLich/archive/2012/05/24/2516860.html看到的,记录下来 主要是XmlSerializationReader和XmlSerializationWriter两个抽象类中包含了很多受保护的方法,其中比较有用的就是byte[]和hexString的转换,分析源码发现是由两个内部类来实现的:BinHexEncoder和BinHexDecoder,看名字就非常清楚了,专门用来处理byte[]和hex的转换的,至于为

Java中Long、String、Date类型之间转换工具类

import java.text.*; import java.util.*; public class DateFormat { /** * date类型进行格式化输出 * @param date * @return */ public static String dateFormat(Date date) { SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateSt

数字与字符串之间的转换

char*itoa(intvalue,char*string,intradix); int value 被转换的整数,char *string 转换后储存的字符数组,int radix 转换进制数,如2,8,10,16 进制等 头文件: <stdlib.h> atof(将字符串转换成浮点型数) atoi(将字符串转换成整型数) atol(将字符串转换成长整型数) strtod(将字符串转换成浮点数) strtol(将字符串转换成长整型数) strtoul(将字符串转换成无符号长整型数) toa

整数与字符串之间的转换函数

1.将无符号长整数value转换成字符串并返回该字符串,radix为转换时所用基数 char *ultoa(unsigned long value, char *string, int radix); 2.将长整数value转换成字符串并返回该字符串,radix为转换时所用基数 char *ltoa(long value, char *string, int radix); 3.将整数value转换成字符串并返回该字符串,radix为转换时所用基数 char *itoa(int value, c