C++基本数据类型及类型转换
来源:互联网 发布:华彬网络商学院 编辑:程序博客网 时间:2024/06/02 05:31
http://blog.csdn.net/pipisorry/article/details/25346379
c++基本数据类型
INT 类型,为整型数字,不同语言定义的范围不同
FLOAT,为数字浮点型,其小数点后面可以跟N个数字
DOUBLE,为双精度数字类型,其小数点后只能有两个数字
LONG,为长整型其范围要比INT类型范围广
c++类型转换
1. c++中string到int的转换
1) 在C标准库里面,使用atoi:
#include <cstdlib>
#include <string>std::string text = "152";
int number = std::atoi( text.c_str() );
if (errno == ERANGE) //可能是std::errno
{
//number可能由于过大或过小而不能完全存储
}
else if (errno == ????)
//可能是EINVAL
{
//不能转换成一个数字
}
2) 在C++标准库里面,使用stringstream:(stringstream 可以用于各种数据类型之间的转换)
#include <sstream>
#include <string>std::string text = "152";
int number;
std::stringstream ss;
ss << text;//可以是其他数据类型
ss >> number; //string -> int
if (! ss.good())
{
//错误发生
}ss << number;// int->string
string str = ss.str();
if (! ss.good())
{
//错误发生
}
3) 在Boost库里面,使用lexical_cast:
#include <boost/lexical_cast.hpp>
#include <string>try
{
std::string text = "152";
int number = boost::lexical_cast< int >( text );
}
catch( const boost::bad_lexical_cast & )
{
//转换失败
}
[如何将字符串转换int64_t]
int转换成string
c++中将输入的数字以字符(串)形式输出- #include <iostream>
- #include <sstream>
- #include <string>
- using namespace std;
- void main(){
- int i = 65;
- cout<<char(i)<<endl; //输出‘A' <=>printf("%c\n", i);
- stringstream ss;
- ss<<i;
- string s;
- ss>>s;
- cout<<s<<endl; //输出”65“
- char *c = new char;
- itoa(65, c, 10);
- cout<<c<<endl; //输出”65“
- //cout<<strcmp(c, "65")<<endl;
- }
2.string 转 CString
CString.format(”%s”, string.c_str());用c_str()确实比data()要好;
3.char 转 CString
CString.format(”%s”, char*);4.char 转 string
string s(char *);只能初始化,在不是初始化的地方最好还是用assign().
5.string 转 char *
char *p = string.c_str();6.CString 转 string
string s(CString.GetBuffer());GetBuffer()后一定要ReleaseBuffer(),否则就没有释放缓冲区所占的空间.
7.字符串的内容转换为字符数组和C—string
(1) data(),返回没有”\0“的字符串数组(2) c_str(),返回有”\0“的字符串数组
(3) copy()
8.CString与int、char*、char[100]之间的转换
(1) CString互转int
将字符转换为整数,可以使用atoi、_atoi64或atol。而将数字转换为CString变量,可以使用CString的Format函数。如
CString s;
int i = 64;
s.Format(”%d”, i)
Format函数的功能很强,值得你研究一下。
void CStrDlg::OnButton1()
{
CString
ss=”1212.12″;
int temp=atoi(ss);
CString aa;
aa.Format(”%d”,temp);
AfxMessageBox(”var is ” + aa);
}
(2) CString互转char*
///char * TO cstring
CString strtest;
char * charpoint;
charpoint=”give string a value”; //?
strtest=charpoint;
///cstring TO char *
charpoint=strtest.GetBuffer(strtest.GetLength());
(3) char *转成CString
标准C里没有string,char *==char []==string, 可以用CString.Format(”%s”,char *)这个方法来将char *转成CString。
要把CString转成char *,用操作符(LPCSTR)CString就可以了。
CString转换 char[100]
char a[100];
CString str(”aaaaaa”);
strncpy(a,(LPCTSTR)str,sizeof(a));
static_cast类型转换
static_cast < type-id > ( expression )
注意:static_cast不能转换掉expression的const、volatile、或者__unaligned属性。
虽然const_cast是用来去除变量的const限定,但是static_cast却不是用来去除变量的static引用。其实这是很容易理解的,static决定的是一个变量的作用域和生命周期,比如:在一个文件中将变量定义为static,则说明这个变量只能在本Package中使用;在方法中定义一个static变量,该变量在程序开始存在直到程序结束;类中定义一个static成员,该成员随类的第一个对象出现时出现,并且可以被该类的所有对象所使用。对static限定的改变必然会造成范围性的影响,而const限定的只是变量或对象自身。但无论是哪一个限定,它们都是在变量一出生(完成编译的时候)就决定了变量的特性,所以实际上都是不容许改变的。这点在const_cast那部分就已经有体现出来。
static_cast和reinterpret_cast一样,在面对const的时候都无能为力:两者都不能去除const限定。两者也存在的很多的不同,比如static_cast不仅可以用在指针和引用上,还可以用在基础数据和对象上;reinterpret_cast可以用在"没有关系"的类型之间,而用static_cast来处理的转换就需要两者具有"一定的关系"了。reinterpret_cast可以在任意指针之间进行互相转换,即使这些指针所指的内容是毫无关系的,也就是说一下语句,编译器是不会报错的,但是对于程序来说也是毫无意义可言的,只会造成程序崩溃
unsignedshort Hash( void *p ) {
unsignedlong val = reinterpret_cast<unsignedlong>( p );
return ( unsigned short )( val ^ (val >> 16));
}
int main() {
typedefunsignedshort (*FuncPointer)( void *) ;
FuncPointer fp = Hash; //right,this is what we want
int a[10];constint* ch = a; //right, array is just like pointer
char chArray[4] = {'a','b','c','d'};
fp = reinterpret_cast<FuncPointer> (ch); //no error, but does not make sense
ch = reinterpret_cast<int*> (chArray); //no error
cout <<hex<< *ch; //output: 64636261 //it really reinterpret the pointer
}
而以上转换,都是static_cast所不能完成的任务,也就是说把上边程序里所有的reinterpret_cast换成static_cast的话,就会立即得到编译错误,因为目标指针和原始指针之间不存在"关系"
从上边的程序,也就一下子看出来了reinterpret_cast和static_cast之间最本质的区别。
但是从基类到子类的转换,用static_cast并不是安全的,具体的问题会在dynamic_cast一篇阐述。
在指针和引用方便,似乎也只有继承关系是可以被static_cast接受的,其他情况的指针和引用转换都会被static_cast直接扔出编译错误,而这层关系上的转换又几乎都可以被dynamic_cast所代替。这样看起来static_cast运算符的作用就太小了。
实际上static_cast真正用处并不在指针和引用上,而在基础类型和对象的转换上 。 而基于基础类型和对象的转换都是其他三个转换运算符所办不到的
from: http://blog.csdn.net/pipisorry/article/details/25346379
ref:
- C++基本数据类型及类型转换
- Java之基本数据类型及类型转换
- java基本数据类型及类型转换
- java八大基本数据类型及类型转换
- java基本数据类型及类型转换
- java基本数据类型及类型转换
- 基本数据类型&类型转换
- C语言的基本数据类型及数据类型转换
- C基本数据类型转换
- C学习笔记(三) 数据类型分类及类型转换
- 数据类型及类型间转换
- Java数据类型及类型转换
- JAVA数据类型及类型转换
- C语言基本数据类型转换
- 数据类型及基本数据类型间的转换
- 基本数据类型:8种基本类型、对应的包装类、引用数据类型及与String 之间的转换。
- 浅谈数据类型转换之基本类型
- Java SE-(基本数据类型)类型转换
- 笨蛋得难题 (来源:南阳理工大学ACM)java
- 最简单的基于FFMPEG的图像编码器(YUV编码为JPEG)
- PowerDesigner系列教程之安装配置1
- JavaSE07_关键字之this
- sql*plus中SP2-0618和SP2-0611的解决方法
- C++基本数据类型及类型转换
- 阅读笔记-[开始执行第一周]
- memche的常用命令
- ios 设备判断 版本判断总结
- 一个Markdown的例子
- socket编程中select的使用
- XCL-Charts画圆图
- android中的telephony学习笔记(3)-SmsManager
- 生成日期类 使头文件和实现文件分离