Qt数据类型与强制转换
Qt数据类型与强制转换(整理)
变量(Variable)和对象(Object)
在python中的变量不需要声明,因为python是动态语言。python中所有的东西都是对象。
数字(Number)和字符(String)
在python中包括几种(整数、浮点数、长整数)数字类型和两种字符类型。
整数(Integer)和长整数(LongInteger)
Python提供了三种整数类型:bool,int和long。bool类型只有两个值True和False,在数值环境中被当作1和0对待。long类型支持的数字的大小仅受机器内存大小的限制。使用long类型的例子:q=7L。唯一不足的是:long类型比int类型慢。
浮点数(Float)和小数(Decimal)
Python提供了三种浮点值:float,Decimal和complex。其中float的值为双精度浮点数,表示的范围决定于编译python的C(或Java)编译器。由于计算机表示浮点数的方式的原因,会导致小的误差。float使用64位表示浮点数。如果需要更高的精确度,可以使用decimal模块中的Decimal数字(默认使用28位表示小数部分)。但是运行的时候比float慢很多。Decimal数字适用于金融计算。
使用Decimal的例子:
importdecimal
decimal.Decimal("5.1")
decimal.Decimal("8.9e-4")
Python也提供了内建的复数类型:complex。但是使用j作为虚数单位。例如:c=5.4+0.8j。
字节字符串(Bytestring),Unicode字符串(Unicode String)和QString
Python中有两种内建的字符串:str(表示字节字符串)和unicode(表示Unicode字符)。PyQt提供了第三种字符串类型:QString。
thesafest route is to use strs for 7-bit ASCII and for raw binary 8-bit bytes, andunicode or QString otherwise.
集合(Collection)
内建的集合类型有:tuple(元组)、list(列表)、dict(字典)、set和frozenset。其中tuple和frozenset是不可变的,其它都是可变的。
在Python标准库中有一个集合类型,此类型不包含类型索引,而是包含指定类型的数字。这就是array类型。它使用在需要存储大量的数字并且运行效率尽可能高的情况下。
元组(Tuple)
元组表示的是一个包含零个或更多个对象索引的有序序列。元组支持序列函数(如len())。这使得我们从元组中提取项目十分容易。然而,由于元组是不可变的,所以我们不能替换或者删除其中的项目。但我们可是通过把元组转换成列表间接实现此目的。
创建元组时,使用与不使用圆括号“()”都可以得到一个元组,这是没有区别的。
例如:
ex1=a,b,c
ex2=(a,b,c)
是一样的。
列表(List)
列表是与元组类似的有序序列。在字符串和元组中使用的序列函数及切片工具均严格适用于列表。与元组的区别是,列表可变,拥有可以用来改变它的函数。创建列表的时候,必须方括号“[]”或者使用list()构造器。
字典(Dictionarie)
dict类型是一个数据字典,也被看成联合数组。字典包含一组无序的“键—值”对以及提供快速的键查询。字典中的键必须是唯一的,并且是不可变的,如元组、字符串或数字;值可以是任意类型。它和Perl中的hash、Java中的HashMap和C++中的unordered_map类似。
字典可以使用dict()构建器构建。
集合(Set)(和数学上的集合定义比较接近)
Python提供了两种set类型:set和frozenset。它们都是无序的,因此都不是序列。Set可变,它的项目可增加或移除。Frozenset不可变,不能被改变。所以,Frozenset也能用作字典的“键”。
Set中的项目是唯一的;试图增加一个已存在于set中的项目到set中,add()方法将什么也不做。包含相同项目的两个set相等,而不管其中项目的插入顺序。set和只有“键”而无“值”的字典类似。
frozenset可以使用单一的序列参数创建,例如,元组或列表。set也可以使用相同的方式创建。
例如:
unicorns =set(("Narwhal","Oryx","Eland"))
如果创建的是set对象,那么就可使用add()和remove()方法来增加和移除set中的项目了。
内建函数(Build-inFunction)
Python中有大量的内建函数和操作符:例如,del,print,len(),type(),help(),dir(str),range(), open(), hasattr(), isinstance(), max(), min()
与set相关的一些内建函数与操作符:
in,not in,len(),clear(), copy(), add(), remove(), discard(), issubset(), issuperset(), union(),intersection(), difference()
一些与序列(元组,列表,字典)相关的内建函数与操作符:
all,any, in, not in, len(), max(), min(), sum()
一些数学相关的内建函数
abs(),divmod(i,j),hex(i),oct(i),float(x),int(x),long(x),pow(x,y),round(x,n)
类型转换
把QString转换为 double类型
方法1.QString str="123.45";
doubleval=str.toDouble(); //val=123.45
方法2.很适合科学计数法形式转换
bool ok;
double d;
d=QString("1234.56e-02").toDouble(&ok); //ok=true;d;12.3456.
把QString转换为float形
1.QString str="123.45";
float d=str.toFloat(); //d=123.45
2.QString str="R2D2";
bool ok;
float d=str.toFloat(&ok); //转换是被时返回0.0,ok=false;
把QString形转换为整形
1.转换为十进制整形
注意:基数默认为10。当基数为10时,并且基数必须在2到36之
间。如果基数为0,若字符串是以0x开头的就会转换为16进制,若以0开头就转换为八进制,否则就转换为十进制。
Qstring str="FF";
bool ok;
int dec=str.toInt(&ok,10);//dec=255 ; ok=rue
int hex =str.toInt(&ok,16);//hex=255;ok=true;
3.常整形转换为Qstring形
long a =63;
QStringstr=QString::number(a,16); //str="3f";
QStringstr=QString::number(a,16).toUpper(); //str="3F";
Qstring 转换char*问题!
方法一:
QString qstr("hello,word");
const char * p = qstr.toLocal8Bit().data();
方法二:
const char *p = qstr.toStdString().data();
转换过来的是常量
把当前时间转化为QString...
public QDateTime qdate =QDateTime.currentDateTime();
datetime = qdate.toString("yyyy年MM月dd日ddddhh:mm:ss");
如果不是QTime和QDate类比如说:通过TCP/IP接收到的charunsigned char 类等如何转换为QString类
QString Time2String( DWORD dwTime)
{
char cTime[50] = {0};
memset(cTime,0,50);
strftime(cTime,32,"%Y-%m-%d%H:%M:%S",localtime(&time_t(dwTime)));
return QString(cTime);
}
来自: http://hi.baidu.com/ruwind2010/blog/item/3cee9b53a0059a501038c2cc.html
各种数据类型的相互转换
char * 与 const char *的转换
char *ch1="hello11";
const char *ch2="hello22";
ch2 = ch1;//不报错,但有警告
ch1 = (char *)ch2;
char 转换为 QString
其实方法有很多中,我用的是:
char a='b';
QString str;
str=QString(a);
QString 转换为 char
方法也用很多中
QString str="abc";
char *ch;
ch = str.toLatin1.data();
QByteArray 转换为 char *
char *ch;//不要定义成ch[n];
QByteArray byte;
ch = byte.data();
char * 转换为 QByteArray
char *ch;
QByteArray byte;
byte = QByteArray(ch);
QString 转换为 QByteArray
QByteArray byte;
QString string;
byte = string.toAscii();
QByteArray 转换为 QString
QByteArray byte;
QString string;
string = QString(byte);
这里再对这俩中类型的输出总结一下:
qDebug()<<"print";
qDebug()<<tr("print");
qDebug()<<ch;(ch 为char类型)
qDebug()<<tr(ch);
qDebug()<<byteArray;(byteArray是QByteArray类型)
qDebug()<<tr(byteArray);
qDebug()<<str;(str 为Qstring类型)
但是qDebug()<<tr(str);是不可以的,要想用tr()函数输出QString类型的字符则要如下:
qDebug()<<tr(str.toLatin1);
int 转 QString
int a=10;
QString b;
b=QString::number(a)
QString 转int
QString a="120"