Qt数据类型与强制转换(转)_威的生活----要精彩_百度空间

 
变量( Variable )和对象( Object )
 
在 python 中的变量不需要声明,因为 python 是动态语言。 python 中所有的东西都是对象。
 
 
 
数字( Number )和字符( String )
 
在 python 中包括几种(整数、浮点数、长整数)数字类型和两种字符类型。
 
 
 
整数( Integer )和长整数( Long Integer )
 
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 的例子:
 
import decimal
 
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 。
 
the safest route is to use strs for 7-bit ASCII and for raw binary 8-bit bytes, and unicode 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-in Function )
 
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";
 
double val=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;
 
QString str=QString::number(a,16);  //str="3f";
 
QString str=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 接收到的 char unsigned 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);
}
 
 
 
最后补充的 QString转换为char* 
QString str1 = "Test";
QByteArray ba = str1.toLatin1();
const char *c_str2 = ba.data();
printf("str2: %s", c_str2);
 
 
 
 
 
 
 
由于经常使用C/C++类型,最后又要将其显示到界面上,所以会经常用到转换成QString方法,如果是char型比较好办,其他类型则会用到arg方法
 
 
char* 转 QString:
 
 
点击( 此处 )折叠或打开
 
 
char port [ 10 ] = "COM3" ;
 
 
QString szPort  = QString ( port ) ;
 
 
int 转 QString :
 
 
点击( 此处 )折叠或打开
 
 
int index = 1 ;
 
 
QString szId  = QString : : number ( index ) ;
 
float/double 转 QString :
 
 
点击( 此处 )折叠或打开
 
 
float fSpeed  = 3 . 2 ;
 
 
QString szSpeed  = QString : : number ( fSpeed , ' f ' , 2  ) ; / / szSpeed的内容为 "3.20"
 
多个变量 到 QString:
 
 
点击( 此处 )折叠或打开
 
 
char port [ 10 ] = "COM2" ;
 
 
int baudrate  = 9600 ;
 
 
QString szFailed  = QString ( "Open %1 baudrate %2 failed!" ) . arg ( port ) . arg ( baudrate ) ;
 
中文 到 QString:
 
 
点击( 此处 )折叠或打开
 
 
QString szOpened  = QString : : fromLoacal8Bit ( "打开串口" );
 
中文和变量组合 到 QString:
 
 
点击( 此处 )折叠或打开
 
 
char port [ 10 ] = "COM2" ;
 
 
int baudrate  = 9600 ;
 
 
QString szFailed  = QString : : fromLoacal8Bit ( "打开串口%1, 波特率%2" ) . arg ( port ) . arg ( baudrate ) ;
 
 
 
 
 




如果,感到此时的自己很辛苦,那告诉自己:容易走的都是下坡路。坚持住,因为你正在走上坡路,走过去,你就一定会有进步。如果,你正在埋怨命运不眷顾,开导自己:命,是失败者的借口;运,是成功者的谦词。命运从来都是掌握在自己的手中,埋怨,只是一种懦弱的表现;努力,才是人生的态度。
原文地址:https://www.cnblogs.com/superit/p/3831316.html