Windows / VS下不同类型变量转换
[时间: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下不同类型变量转换的更多相关文章
- 怎么将linux下的项目转换成windows的VS2010下的项目?
怎么将linux下的项目转换成windows的VS2010下的项目? 不显示删除回复 显示所有回复 显示星级回复 ...
- 如何用python在Windows系统下,生成UNIX格式文件
平时测试工作中,少不了制造测试数据.最近一个项目,我就需要制造一批可在UNIX下正确读取的文件.为确保这批文件能从FTP下载成功,开发叮嘱我:“文件中凡是遇到换行,换行符必须是UNIX下的LF,而不是 ...
- Windows环境下32位汇编语言程序设计(典藏版)
Windows环境下32位汇编语言程序设计(典藏版)(含CD光盘1张)(年,经典再现!) 罗云彬 著 ISBN 978-7-121-20759-4 2013年7月出版 定价:99.00元 756页 1 ...
- Windows内核下操作字符串!
* Windows内核下操作字符串! */ #include <ntddk.h> #include <ntstrsafe.h> #define BUFFER_SIZE 1024 ...
- linux和Dos下换行符转换
一.windows的文件到linux下的转换方法: 1. 用sed命令替换 sed -e 's/^M//g' original.txt > target.txt (注意^M 在Linux/Uni ...
- Windows环境下google protobuf入门
我使用的是最新版本的protobuf(protobuf-2.6.1),编程工具使用VS2010.简单介绍下google protobuf: google protobuf 主要用于通讯,是google ...
- 浅谈Windows环境下DOS及MS-DOS以及常见一些命令的介绍
浅谈Windows环境下DOS及MS-DOS以及常见一些命令的介绍 前记 自己是搞编程的,首先我是一个菜鸟,接触计算机这么久了,感觉很多计算机方面的技术和知识朦朦胧胧.模模糊糊,貌似有些贻笑大方了:所 ...
- ElasticHD Windows环境下安装
ElasticHD Linux环境下安装教程 ElasticHD windows环境下安装教程 习惯了T-SQL 查询,Elasticsearch的DSL查询语法简直就是反人类呀,一 ...
- kettle的下载、安装和初步使用(windows平台下)(图文详解)
kettle的下载 Kettle可以在http://kettle.pentaho.org/网站下载 http://sourceforge.net/projects ...
随机推荐
- 使用IntelliJ IDEA 15和Maven创建Java Web项目
转自:https://blog.csdn.net/myarrow/article/details/50824793博文链接!
- <转>lua解释执行脚本流程
本文转自:http://www.cnblogs.com/zxh1210603696/p/4458473.html #include "lua.hpp" #include <i ...
- 利用Apache配置http expires值提高网站性能
HTTP头中有个expires参数,设置一个未来的时间,在这时间以前,浏览器会先从cache读取,如果没有再从服务器中读取.对于像图片,css,script等静态内容,只需发一次http reques ...
- 16条Android开发小经验
1. TextView中的getTextSize返回值是以像素(px)为单位的, 而setTextSize()是以sp为单位的. 所以如果直接用返回的值来设置会出错,解决办法是 用setTextSiz ...
- Linux安装最新版Mono,Jexus(截至2015年12月30日)
安装系统必备: yum -y install gcc gcc-c++ bison pkgconfig glib2-devel gettext make libpng-devel libjpeg-dev ...
- SAP升级ECC6.0 引起的一个事故
上个月底,公司的SAP系统升级到了ECC6,在升级时,我们进行了所有关联系统的集成测试,当时没有发现什么问题. 过了2周,需要从SAP下载对账单了,这个时候问题出现了,很多分公司的数据下载失败.和SA ...
- Could not connect to Redis at xxx.xxx.xxx.xxx:6379: Connection refused
开发发来消息说测试环境的redis无法登录: # redis-cli -p 6379 -h xxx.xxx.xxx.xxx Could not connect to Redis at xxx.xxx. ...
- iOS runtime执行时具体解释
什么是runtime? runtime直译就是执行时间,run(跑,执行) time(时间),网上大家都叫它执行时,它是一套比較底层的纯C语言API,属于一个C语言库,包括了非常多底层的C语言API, ...
- SharePoint 中时间轴 Timeline的实现
客户需要在OA中实现每日动态功能,能够记录每一位员工的每天的工作动态,我很快想到了时间轴,因为时间轴能很直观的现实员工每一刻的动态.就像Facebook的Timeline效果(点击查看). 尝试着搜索 ...
- 简单示例:Spring4 整合 单个Redis服务
1. 引入spring-data-redis.jar API:https://docs.spring.io/spring-data/redis/docs/current/api/org/springf ...