VC之CString,wchar_t,int,string,char*之间的转换_IT挖矿工的博客-程序员资料

技术标签: path  string  null  insert  编程  mfc  

1. CString 转 wchar_t

CString path = "asdf";

wchar_t wstr[256] = path.AllocSysString();

或者:

wchar_t wcstring[256];

MultiByteToWideChar(CP_ACP,0,path,-1,wcstring,256);

2. wchar_t转CString

WideCharToMultiByte(CP_ACP,0,wcstring,256,path.GetBuffer(0),256,NULL,NULL);

path.ReleaseBuffer(0);

3. string 转 CString

CString.format("%s", string.c_str());

4. char 转 CString

CString.format("%s", char*);

5. char 转 string

string s(char *);

6. string 转 char *

char *p = string.c_str();

7.CString 转 string

string s(CString.GetBuffer());

CString   str   =   "fdjfdas";  
string   s   =   (LPCTSTR)str;

1,string -> CString
CString.format("%s", string.c_str());
用c_str()确实比data()要好.
2,char -> string
string s(char *);
你的只能初始化,在不是初始化的地方最好还是用assign().
3,CString -> string
string s(CString.GetBuffer());
GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.


《C++标准函数库》中说的
有三个函数可以将字符串的内容转换为字符数组和C—string
1.data(),返回没有”/0“的字符串数组
2,c_str(),返回有”/0“的字符串数组
3,copy()

---------------------------------------------------------------

CString与int、char*、char[100]之间的转换- -


CString与int、char*、char[100]之间的转换- -

CString互转int

将字符转换为整数,可以使用atoi、_atoi64或atol。
而将数字转换为CString变量,可以使用CString的Format函数。如
CString s;
int i = 64;
s.Format("%d", i)
Format函数的功能很强,值得你研究一下。

void CStrDlg::OnButton1()
{
// TODO: Add your control notification handler code here
CString ss="1212.12";
int temp=atoi((char*)LPCTSTR(ss));

CString aa;
aa.Format("%d",temp);
AfxMessageBox("var is " + aa);
}

sart.Format("%s",buf);

CString互转char*

///char * TO cstring
CString strtest;
char * charpoint;
charpoint="give string a value";
strtest=charpoint;


///CString TO char *
charpoint=strtest.GetBuffer(strtest.GetLength());

标准C里没有string,char *==char []==string

 

char *转成CString

可以用CString.Format("%s",char *)这个方法来将char *转成CString。

CString转成char *

用操作符(LPCSTR)strtest 或者 (char*)(LPCSTR)strtest 就可以了。


CString转换 char[100]

char a[100];
CString str("aaaaaa");
strncpy(a,(LPCTSTR)str,sizeof(a));

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1570001

(一) 概述

string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳入C++标准之中;

CString(typedef CStringT > CString)为Visual C++中最常用的字符串类,继承自CSimpleStringT类,主要应用在MFC和ATL编程中,主要数据类型有char(应用于ANSI),wchar_t(unicode),TCHAR(ANSI与unicode均可);

char*为C编程中最常用的字符串指针,一般以'/0'为结束标志;

(二) 构造

string是方便的,可以从几乎所有的字符串构造而来,包括CString和char*;

CString次之,可以从基本的一些字符串变量构造而来,包括char*等;

char*没有构造函数,仅可以赋值;

举例:

char* psz = “joise”;

CString cstr( psz );

string str( cstr );

(三) 运算符重载

a) operator=

string是最方便的,几乎可以直接用所有的字符串赋值,包括CString和char*;

CString次之,可以直接用些基本的字符串赋值,包括char*等;

char*只能由指针赋值,并且是极危险的操作,建议使用strcpy或者memcpy,而且char*在声明的时候如未赋初值建议先设为NULL,以避免野指针,令你抓狂;

举例:

char *psz = NULL;

psz = new char[10]; //当然,以上的直接写成char *psz = new char[10];也是一样

memset( psz, 0, 10 );

strcpy( psz, “joise” );

CString cstr;

cstr = psz;

string str;

str = psz;

str = cstr;

delete []psz;

b) operator+

string与CString差不多,可以直接与char*进行加法,但不可以相互使用+运算符,即string str = str + cstr是非法的,须转换成char*;

char*没有+运算,只能使用strcat把两个指针连在一起;

举例:

char* psz = “joise”;

CString cstr = psz;

cstr = cstr + psz;

string str = psz;

str = str + str + psz;

strcat( psz, psz );

strcat( psz, cstr );//合法

strcat( psz, str );//非法,由此可见,CString可自动转换为const char*,而string不行

c) operator +=

string是最强大的,几乎可以与所有的字符串变量+=,包括CString和char*;

CString次之,可以与基本的一些字符串变量进行+=而来,包括char*等;

char*没有+=运算符,只能使用strcat把两个指针连在一起;

d) operator[]

CString最好,当越界时会抛出断言异常;

string与char*下标越界结果未定义;

举例:

char* psz = “joise”;

CString cstr = psz;

cout << cstr[8];

string str = psz;

cout << str[8];

cout << psz[8];

e) operator== 、operator!=、operator> 、operator< 、operator>= 、perator<=

CString与string之间不可以进行比较,但均可以与char*进行比较,并且比较的是值,而不是地址;

cout << ( psz == cstr );

cout << ( psz == str );

cout << ( str == psz );

cout << ( cstr == psz );//以上代码返回均为1

(四) 常用算法

a) 查找

作用 char* string CString
查找指定值 strchr
strstr
strrstr
strspn find Find
第一个匹配的值 fild_first_of FindOneOf 从后面开始查找 ReserveFind 指定匹配方式 find_if
注:find_if中是把范围内的值挨个代入匹配函数直至返回true

b) 比较

作用 char* string CString 查找指定值(区分大小写) strcmp
strncmp
strcoll
_strncoll operator<
operator>
operator<=
operator>=
operator==
operator!= Collate

Compare 查找指定值(不区分大小写) _stricmp
_strnicmp
_stricoll
_strnicoll CollateNoCase

CompareNoCas
注:返回值如果<0则前面的值小于后面的值,反之亦然

c) 替换

作用 char* string CString 查找指定值 _strset
_strnset
replace
replace_copy
replace_copy_if
replace_if Replace
d) 插入

作用 char* string CString 查找指定值 insert Insert
 
e) 增加 作用 char* string CString 动态增加值 strcat push

append Append

AppendChar

AppendFormat

f) 截取

作用 char* string CString 得到部分值 用下标操作 substr Left

Mid

Right

Truncate

g) 移除

作用 char* string CString 移除部份值 remove Remove 移除空白值 RemoveBlanks

注:此为ATL提供,非C函数 remove_if Trim

TrimLeft

TrimRig

h) 转换大小写

作用 char* string CString 转换大小写 _strlwr

_strupr MakeLower

MakeUpper

i) 与其他类型转换

作用 char* string CString 转化为数字 atoi

atod

atof Format 转化为char* c_str
GetBuffer

GetBufferSetLen
j) 格式化

作用 char* string CString 格式化 sprintf Format


k) 得到长度

作用 char* string CString
得到长度 strlen length GetLength 得到大小 size GetAllocLength
l) 判断为空

作用 char* string CString 判断是否为空判断是否==NULL或者第一个字符是否是'/0' empty IsEmpty
m) 重定义大小

作用 char* string CString 重定义大小 realloc
new resize GetBufferSetLength
n) 释放资源

作用 char* string CString 释放 free

delete (delete[]) ReleaseBuffer

ReleaseBufferSetLength

(五) 安全性>

CString > string > char*;

(六) 灵活性

CString > string >char*;

(七) 可移植性

char* = string > CString

 

*****************

CHAR 转CString之间等于就可以了啊!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/rattlerattle/article/details/5403253

智能推荐

Rachel_Zhang的“压缩感知”之“HelloWorld"解读_jbb0523的博客-程序员资料

题目:Rachel_Zhang的“压缩感知”之“”HelloWorld"解读

JavaWeb - 我们的开发规范(VO、DTO、BO、PO、DO、POJO)_放羊的牧码的博客-程序员资料

网传一张图PO(Persistant Object)持久对象PO比较好理解简单说PO就是数据库中的记录,一个PO的数据结构对应着库中表的结构,表中的一条记录就是一个PO对象通常PO里面除了get,set之外没有别的方法对于PO来说,数量是相对固定的,一定不会超过数据库表的数量等同于Entity,这俩概念是一致的BO(Business Object)业务对象BO就是PO的组合简单的例子比如说PO是一条交易记录,BO是一个人全部的交易记录集合对象复杂点儿的例子P.

Labelme制作Mask-Rcnn数据集,并批量转换json文件_向死而生zzz的博客-程序员资料

Labelme制作Mask-Rcnn数据集步骤。一、安装anaconda查看博客https://mp.csdn.net/postedit/85069386二、安装labelme 1、打开anaconda prompt2、conda create --name=labelme python=3.5(创建名称为labelme的环境,Python版本为3.5)3、activat...

桌面计算机安,最新版本:Win7 dream桌面安装64位,_计算机基本知识_IT /计算机_信息..._六号轨迹的博客-程序员资料

下载压缩包并解压缩,找到“ Install.bat”文件,右键单击-“以管理员身份运行”,它将无法正常工作,估计直接双击即可,您必须以管理员! !记住~~记住~~~! ,出现安装界面,并出现“按任意键继续”,然后单击Enter-“ vista version:[6,3],如果是64位win7,则输入数字6,如果是32位(即是,通常的X86版本)输入数字3,并且***将显示Windows Dream...

Yolov5训练FLIR红外线数据集_Fighting_1997的博客-程序员资料_flir数据集

训练Yolov5的博客很多了,只要放好数据集位置即可本博客使用的yolov5-5.0版本最近确实事情较多,博客写的比较简练,如果有问题,直接评论即可,我会短时间内回复!主要就是下图的文件放置创建flir.yaml文件,这个是yolov5中voc.yaml文件,我直接复制一下修改后:(建议在ubuntu系统中训练)修改train.py参数训练过程中如果出现关于channel错误信息的,直接点进去,修改通道数为1即可。训练结果..._1671465600

魔术方法_clone( )_独酌山外小阁楼的博客-程序员资料

clone():克隆对象的时候自动调用。测试代码如下:class Wo{public $username='king';public function say(){echo 'hello '.$this-&gt;username.'&lt;br/&gt;';}}$w1=new Wo; //创建一个新的对象echo $w1-&gt;username.'&lt;br/&g...

随便推点

Windows抓包工具 -- Charles_chai_mm的博客-程序员资料

下载、安装(Windows 电脑 64位)链接: https://pan.baidu.com/s/1c2VujTm 密码: ai98 电脑端使用:步骤一:将其设置成系统的代理服务器。选择菜单中的 “Proxy” -> “Windows Proxy” 步骤二: Chrome 和 Firefox 需要设置成使用系统的代理服务器,或者直接将代理服务器设置成127.0.0.

process exporter 监控进程并告警_最爱喝酸奶的博客-程序员资料

本文内容基于 k8s部署prometheus + grafana。process-exporter介绍:在 prometheus 中,process-exporter 可以用来检测所选进程的存活状态。用法:process-exporter [options] -config.path filename.yml如果选择监控的进程并将其分组,可以提供命令行参数或使用 yaml 配置文件。推荐通过 -config.path 指定配置文件。-config.path yaml 文件的常规格式是顶级

新版Chart.js绘制折线图_ll791的博客-程序员资料

网上的资料都是旧版的 , 遇到了一些坑 首先 定义一个canvas , 如果要设置大小的话得在外面放一个div来控制大小 , 设置宽度会自动设置对应的高度 , 自己设置height无效(此处不知道怎么解决)&amp;lt;div style=&quot;width: 1600px&quot;&amp;gt; &amp;lt;canvas id=&quot;myChart&quot;&amp;gt;&amp;lt;/canvas&amp;gt;&amp;lt;/div&amp;gt;添加引用...

configure: error: xml2-config not found. Please check your libxml2 installation._hugh_1013的博客-程序员资料

configure: error: xml2-config not found. Please check your libxml2 installation.sudo apt-get install libxml2-dev error: Cannot find OpenSSL's  1) Configure: error: xml2-config not foun

SpringMVC从入门到精通之第一章【转】_Crazy_Colder的博客-程序员资料

第一节 简介:SpringMVC是Spring框架的一个模块,Spring和SpringMVC无需通过中间整合层进行整合。SpringMVC是基于MVC的WEB框架。MVC设计模式在B/S下的应用:对上图说明①:浏览器发送请求到控制器(这里要知道控制器的作用)②:控制器不能处理请求必须交给模型层来处理接着去访问数据库③:模型层将处理好的结果返回给控制层④:控

杭电OJ-2054_A == B ?_A__yes的博客-程序员资料

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 76226    Accepted Submission(s): 12101Problem DescriptionGive you two numbers A and B,

推荐文章

热门文章

相关标签