[时间:2016-07] [状态:Open]

[关键词:windows,vs,mfc,类型转换]

在实际编码中经常遇到不同类型及编码方式的字符串、变量之间的转换,比如Unicode->char、int->string等等。本文主要介绍这些格式如何相互处理,也作为一个总结,用于在未来中不同的应用。

string <---> char *之间的转换

string --> char *

方法一:

char *p = string.c_str();

方法二:

一个一个字符的赋值

char *p = new char[sring的长度+1];

p[string的长度]='/0';

但是要注意最后赋值'/0'!!!

char * StringToChar(string &str)
{
int len = str.length();
char * p = new char[len+1];
for (int i = 0; i < len; i++)
{
p[i] = str[i];
}
p[len] = '/0';
}

char * --> string

直接使用string的构造函数或者string::assign函数。

string <---> wstring之间的转换

string --> wstring

wstring s2ws(const string& s)
{
_bstr_t t = s.c_str();
wchar_t* pwchar = (wchar_t*)t;
wstring result = pwchar;
return result;
}

wstring --> string

string ws2s(const wstring& ws)
{
_bstr_t t = ws.c_str();
char* pchar = (char*)t;
string result = pchar;
return result;
}

string <---> CString 之间的转换

string --> CString

方法一:

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

方法二:

CString StringToCString(string str)
{
CString result;
for (int i=0;i<(int)str.length();i++)
{
result+=str[i];
}
return result;
}

CString --> string

方法一:

void ConvertCString2string(CString& strSrc, std::string& strDes)
{
#ifndef UNICODE
strDes = strSrc;
#else USES_CONVERSION;
strDes = W2A(strSrc.LockBuffer());
strSrc.UnlockBuffer();
#endif
}

方法二:

CString str;
string s(str.GetBuffer());
str.ReleaseBuffer();

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

方法三:

string CStringToString(CString cstr)
{
string result(cstr.GetLength(), '\0');
for (int i=0;i<cstr.GetLength();i++)
{
result[i]=(char)cstr[i];
}
return result;
}

char * <---> TCHAR *之间的转换

首先说明下:char *是ANSI编码字符的char(STL提供);

TCHAR是UNICODE编码字符的wchar_t;

char * --> TCHAR *

wchar_t *chr2wch(const char *buffer)
{
size_t len = strlen(buffer);
size_t wlen = MultiByteToWideChar(CP_ACP, 0, (const char*)buffer, int(len), NULL, 0);
wchar_t *wBuf = new wchar_t[wlen + 1];
MultiByteToWideChar(CP_ACP, 0, (const char*)buffer, int(len), wBuf, int(wlen));
return wBuf;
}

TCHAR* --> char *

char * wch2chr(LPCTSTR lpString)
{
// Calculate unicode string length
UINT len = wcslen(lpString)*2;
char *buf = (char *)malloc(len);
UINT i = wcstombs(buf,lpString,len);
return buf;
}

wstring <---> CString之间的转换

wstring --> CString

直接使用CString的构造函数、赋值函数或者Format函数,配合wstring的c_str函数;

CString --> wstring

std::wstring str = filename.GetString();// 在Unicode或者多字符环境下使用;

CString <---> char *之间的转换

CString --> char *

方法一:

CString cstr(asdd);
const char* ch = (LPCTSTR)cstr;

方法二:

CString   str= "I am good ";
char* lp=str.GetBuffer(str.GetLength());
str.ReleaseBuffer();

char * ---> CString

CString提供一系列操作可以直接将char *转化为CString,比如构造函数、赋值运算符、Format函数等(注意编码方式)。

举个简单的例子:

char * pStr = “123456”; CString str; str.Format(“%s”, pStr);

char * <---> TCHAR *之间的转换

TCHAR* --> char*

/***********************************************************************
* 函数: THCAR2Char
* 描述:将TCHAR* 转换为 char*
***********************************************************************\
char* THCAR2char(TCHAR* tchStr)
{
int iLen = 2*wcslen(tchStr);//CString,TCHAR汉字算一个字符,因此不用普通计算长度
char* chRtn = new char[iLen+1]
wcstombs(chRtn,tchStr,iLen+1);//转换成功返回为非负值
return chRtn;
}

char * --> TCHAR *

定义了UNICODE宏之后,TCHAR就是宽字符wchar_t,否则TCHAR跟char是一样的;

char * <---> int之间的转换

char * --> int

方法一:

使用C提供的atoi函数(或者相关的)

 #include <stdlib.h>
int atoi(const char *nptr);
long atol(const char *nptr);
long long atoll(const char *nptr);
long long atoq(const char *nptr);

方法二:

C提供的sscanf函数,用法与scanf类似;

方法三:

C++提供的istrstream;

int --> char *

方法一:

在stdlib.h中有个函数itoa()

itoa的用法:

itoa(i,num,10);

i 需要转换成字符的数字

num 转换后保存字符的变量

方法二:

使用C的sprintf,用法与fprintf类似,除了第一个参数不同,注意溢出问题;

方法三:

使用C++提供的流输出ostrstream;

Windows / VS下不同类型变量转换的更多相关文章

  1. 怎么将linux下的项目转换成windows的VS2010下的项目?

    怎么将linux下的项目转换成windows的VS2010下的项目?             不显示删除回复             显示所有回复             显示星级回复        ...

  2. 如何用python在Windows系统下,生成UNIX格式文件

    平时测试工作中,少不了制造测试数据.最近一个项目,我就需要制造一批可在UNIX下正确读取的文件.为确保这批文件能从FTP下载成功,开发叮嘱我:“文件中凡是遇到换行,换行符必须是UNIX下的LF,而不是 ...

  3. Windows环境下32位汇编语言程序设计(典藏版)

    Windows环境下32位汇编语言程序设计(典藏版)(含CD光盘1张)(年,经典再现!) 罗云彬 著 ISBN 978-7-121-20759-4 2013年7月出版 定价:99.00元 756页 1 ...

  4. Windows内核下操作字符串!

    * Windows内核下操作字符串! */ #include <ntddk.h> #include <ntstrsafe.h> #define BUFFER_SIZE 1024 ...

  5. linux和Dos下换行符转换

    一.windows的文件到linux下的转换方法: 1. 用sed命令替换 sed -e 's/^M//g' original.txt > target.txt (注意^M 在Linux/Uni ...

  6. Windows环境下google protobuf入门

    我使用的是最新版本的protobuf(protobuf-2.6.1),编程工具使用VS2010.简单介绍下google protobuf: google protobuf 主要用于通讯,是google ...

  7. 浅谈Windows环境下DOS及MS-DOS以及常见一些命令的介绍

    浅谈Windows环境下DOS及MS-DOS以及常见一些命令的介绍 前记 自己是搞编程的,首先我是一个菜鸟,接触计算机这么久了,感觉很多计算机方面的技术和知识朦朦胧胧.模模糊糊,貌似有些贻笑大方了:所 ...

  8. ElasticHD Windows环境下安装

    ElasticHD Linux环境下安装教程        ElasticHD windows环境下安装教程   习惯了T-SQL 查询,Elasticsearch的DSL查询语法简直就是反人类呀,一 ...

  9. kettle的下载、安装和初步使用(windows平台下)(图文详解)

    kettle的下载 žKettle可以在http://kettle.pentaho.org/网站下载                   http://sourceforge.net/projects ...

随机推荐

  1. cmd下查看端口被某程序占用命令

    经常,我们在启动应用的时候发现系统需要的端口被别的程序占用,如何知道谁占有了我们需要的端口,很多人都比较头疼,下面就介绍一种非常简单的方法,希望对大家有用 假如我们需要确定谁占用了我们的9050端口 ...

  2. Windows系统使用vbs脚本或bat脚本强制杀死指定所有进程 vbs实现循环持续写入内容到vbs打开开的记事本 使用vbs、bat添加windows计划任务 使用cmd schtasks命令添加windows计划任务

    以下脚本windows7下成功运行过,脚本也可以windows计划任务程序一起组合使用 新建一个记事本文档粘贴下面代码后将新建的记事本文档重命名下面对应的脚本名就能使用了: 添加windows计划任务 ...

  3. Rplidar学习(二)—— SDK库文件学习

    SDK头文件介绍 1.头文件简介: rplidar.h //一般情况下开发的项目中仅需要引入该头文件即可使用 RPLIDAR SDK 的所有功能. rplidar_driver.h //定义了 SDK ...

  4. React(0.13) 利用componentDidMount 方法设置一个定时器

    <html> <head> <title>hello world React.js</title> <script src="build ...

  5. Tensorflow中的run()函数

    1 run()函数存在的意义 run()函数可以让代码变得更加简洁,在搭建神经网络(一)中,经历了数据集准备.前向传播过程设计.损失函数及反向传播过程设计等三个过程,形成计算网络,再通过会话tf.Se ...

  6. Dapper MySql DateTime 异常

    实体类 字段类型 DateTime? ,MySQL数据库中字段类型 datetime NULL , 使用dapper扩展读取,报异常:Error Parse column: ** - Object. ...

  7. C 语言整型谜题

    如题,此篇文章是描述C语言中的整数谜题. 假定机器字长是32位的,用2的补码表示整数.对以下C表达式,请问它们在所有情况下都正确吗?如果不是,请给出反例. 初始化: 1 2 3 4 int x = f ...

  8. 谁说C语言很简单?

    前两天,Neo写了一篇<语言的歧义>其使用C语言讨论了一些语言的歧义.大家应该也顺便了解了一下C语言中的很多不可思异的东西,可能也是你从未注意到的东西. 是的,C语言并不简单,让我们来看看 ...

  9. markdown中的锚点处理

    markdown markdown是一个相对简单的DSL,定义了简单的标签来描述html文档格式. 比如: #一级标题 来生成html <h1>一级标题<h1> ##二级标题 ...

  10. 如何在ppt或word中添加高亮代码?

    如何在ppt或word中添加高亮代码? 问题: 如何ppt中添加带有语法高亮的程序代码,就如同下面的形式(在ppt嵌入高亮代码,且可以编辑,带有行号) 详细的要求如下: 1.代码带有语法高亮. 2.结 ...