C++中的数据类型转换方法总结
C++中的数据类型转换方法总结
摘要:本文总结了C/C++中的多种数据类型转换方法,并比较了各自的优劣。给出了推荐的使用建议。
从int到char*,或者反过来从char*到int,在C/C++中到底有多少种转换方法呢?符合标准的大概有四种。即C数据转换函数族、sprintf/snprintf/sscanf函数族、字符串流std::stringstream、std::strsteam。不符合标准却又广为使用的包括CString和boost::lexical_cast。本文只讨论符合标准的转换方法,其中std::strstream由于已经被C++标准委员为指定为不推荐使用的(deprecated),所以不予考虑了。下面重点讨论三种标准转换方法之间的优劣。源代码的地址是:http://download.csdn.net/source/631475
1. Int和char*或std::string之间的转换
C数据转换函数族
C数据转换函数族即包括itoa、atoi等数据类型转换函数在内的一大批C函数,在C语言时代曾经被大量使用。源代码如下:
int i = 10;
char szBuf[10] = "";
itoa(i, szBuf, 10);
cout<<"itoa: szBuf = "<<szBuf<<endl;
i = 0;
i = atoi(szBuf);
cout<<"atoi: i = "<<i<<endl;
使用还是比较简单的。一个最大的问题是:没有进行char*的越界检查,可能会造成数组溢出。
snprintf/sscanf
sprintf是用来格式化字符串的一个C函数,sscanf则是从字符串中读取值的一个C函数。由于Herb Sutter(Exceptional C++系列著作的作者)教导我们“永远也不要使用sprintf”,所以这里我们只使用snprintf。由于snprintf进入C标准较晚,所以在你的编译器中也许只能使用非标准的_snprintf(例如我的VC6平台)。源代码如下:
int i = 20;
char szBuf[10] = "";
memset(szBuf, 0, sizeof(szBuf));
_snprintf(szBuf, sizeof(szBuf), "%d", i);
cout<<"_snprintf: szBuf = "<<szBuf<<endl;
i = 0;
sscanf(szBuf,"%d",&i);
cout<<"sscanf: i = "<<i<<endl;
使用很简单,而且,似乎没有什么内存泄露或者数组越界。
std::stringstream
对流很熟悉的人可能会更快适应std::stringstream的解决方案:
#include <sstream>
using namespace std;
int i = 30;
string strRel;
ostringstream oss;
oss<<i;
&n
相关文档:
1. 使用TCHAR类型,定义在tchar.h中
#include <tchar.h>
#include <stdio.h>
int main()
{
TCHAR s[] = "你";
printf("%s \n",s);
return 0;
}
2.关于C++中文字符的处理
一 引入问题
代码 wchar_t a[3]=L”中国”,编译时出错,出错信息为:数组越界。但wchar_ ......
/*
* File: main.cpp
* Author: Vicky
*
* Created on 2010年5月8日, 下午2:47
*/
#include <iostream>
using namespace std;
void swap(int x, int y) {
cout << "x and y swap before : " << x << "\t" << y << endl;
int i = x;
x = y;
y = i; ......
Technorati 标签: C++ 原文地址:http://www.byvoid.com/blog/c-int64/ 在C/C++中,64为整型一直是一种没有确定规范的数据类型。现今主流的编译器中,对64为整型的支持也是标准不一,形态各异。一般来说,64位整型的定义方式有long long和__int64两种(VC还支持_int64),而输出到标准输出方式有printf(“%lld”,a),printf ......
C/C++ Reference
http://www.cppreference.com/
C++ Library Reference
http://www.cplusplus.com/ref/
Standard C++ Library Class Reference at Rogue Wave
http://www.roguewave.com/support/docs/hppdocs/stdref/
Dink ......
在POSIX中,便有着支持正则表达式的系统函数。GNU/Linux有两套库可用于正则表达式编程:POSIX库和PCRE库。前者不需要单独安装,一般需求还是能满足的,速度稍慢些。后者是久负盛名的Perl正则表达式库,功能强大,匹配速度快,不过可能需要单独安装。
int regcomp (regex_t *compiled, const char *pattern, int cflags)
& ......