在中
类型名称 | 说明 | 备注 |
---|---|---|
qint8 | signed char | 有符号8位数据类型 |
qint16 | signed short | 有符号16位数据类型 |
qint32 | signed int | 有符号32位数据类型 |
qint64 | long long int | 有符号64位数据类型 |
quint8 | unsigned char | 无符号8位数据类型 |
quint16 | unsigned short | 无符号16位数据类型 |
quint32 | unsigned int | 无符号32位数据类型 |
quint64 | unsigned long long int | 无符号64位数据类型 |
qptrdiff | ptrdiff_t | 指针之间的差值 |
qreal | double | 64位浮点数 |
qulonglong | unsigned long long int | 无符号64位数据类型 |
quintptr | uintptr_t | 无符号整型,用于指针 |
uchar | unsigned char | 无符号字符类型 |
uint | unsigned int | 无符号整型 |
ulong | unsigned long | 无符号长整型 |
ushort | unsigned short | 无符号短整型 |
存储原始字节的,比char* 用着更方便,常在串口中使用。
QByteArray b("Hello"); 创建大小为5的字节数组对象,索引为0到4,实际大小还是6
最后'/0'结尾,有时候作为字符串结尾使用。、
QByteArray b("hello");
if(b[5]=='\0'){
printf("b[5] is \0");
}
QByteArray ba;
ba.resize(6);
ba[0] = 0x3c;
ba[1] = 0xb8;
ba[2] = 0x64;
ba[3] = 0x18;
ba[4] = 0xca;
QByteArray类使用从0开始的索引值,就像C++数组一样。在调用resize()后,新分配的字节具有未定义的值。要将所有字节设置为特定值,可以调用fill()函数,该函数的原型声明如下:
QByteArray &QByteArray::fill(char ch, int size = -1)
QByteArray x("Pineapple");
QByteArray y = x.left(4);
// y == "Pine"
QByteArray x("Pineapple");
QByteArray y = x.right(5);
// y == "apple"
可以用成员函数size、length和count来获取字节数组的大小。除了名字不同,这3个函数是等同的,函数的原型声明如下:
int size();
int length();
int count();
其中,参数hexEncoded是十六进制编码的字节数组。由于该函数并不检查参数的有效性,因此遇到非十六进制数据则直接略过,然后继续处理剩余的数据。
字符’5’和’1’为一组,转为十六进制数据0x51,0x51对应的十进制数据是81,ASCII码为81的字符是’Q’。
与fromHex()相逆的函数是toHex(),该函数将字节数组中十六进制的数值编码转化为字符。
显示二进制和十六进制、显示科学记数和指定小数位的数值,QByteArray类的公有静态函数number可以完成这些功能。该函数可以将某个整数转为某种进制的字符数组,函数number的原型声明如下:
QByteArray number(int n, int base = 10)
其中,参数n是要转变的整数;base是要进行转换的进制,进制取值范围为2到36,即从二进制到三十六进制。该函数返回整数n对应的base进制的字符数组。
与此公有静态函数功能类似的成员函数是setNum(),该函数也是将某个整数转为某种进制的字符数组,函数的原型声明如下:
QByteArray & setNum(int n, int base = 10)
其中,参数n是要转变的整数;base是要进行转换的进制,进制取值范围为2到36,即从二进制到三十六进制。该函数返回整数n对应的base进制的字符数组。下列代码演示了setNum()函数的使用:
QByteArray ba;
int n = 63;
ba.setNum(n); // ba == "63"
ba.setNum(n, 16); // ba == "3f"
因为不是静态函数,所以要用对象来调用。
toUpper();
toLower();
isLower();
isUpper()
to**
成员函数data可以返回指向字节数组中存储数据的指针。该函数的原型声明如下:
char data();
该指针可用于访问和修改组成数组的元素。可以指定具体访问字节数组中的某一个,比如ba.data()[0]表示访问第0个。
如果要把char转为QString,可以直接作为参数传入QByteArray类的构造函数中:
char* pt;
QByteArray byte(str);
string是C++标准库中的字符串类型。QByteArray类提供的成员函数toStdString()可以将字节数组转为string。该函数的原型声明如下:
std::string toStdString();
与该函数相反的函数是静态成员函数fromStdString(),它将string数据转为字节数组,该函数的原型声明如下:
[static] QByteArray QByteArray::fromStdString(const std::string &str);
其中,参数str是要转换的string字符串。函数返回转换后的字节数组。注意,转换的是str的一份备份,转换过程并不会影响str本身的内容。
可以使用函数isEmpty()来判断字节数组是否为空,即size是否为0。函数isEmpty()的原型声明如下:
bool isEmpty();
如果字节数组的size为0,则返回true,否则返回false。
indexof
lastindexof()
函数insert()可以在某个索引位置上插入字节数组,该函数的原型声明如下:
QByteArray & insert(int i, const QByteArray &ba);
prrpend() 开头插入
QChar类是Qt中用于表示一个字符的类,实现在QtCore共享库中。QChar类的内部用两个字节的Unicode编码来表示一个字符。