字节数组(QByteArray)
在Qt中
QByteArray
可以看做是C语言中char*
的升级版本。我们在使用这种类型的时候可通过这个类的构造函数申请一块动态内存,用于存储我们需要处理的字符串数据。
1.构造函数
// 构造空对象
QByteArray::QByteArray();
// 将data中的size个字符进行构造, 得到一个字节数组对象
// 如果 size==-1 函数内部自动计算字符串长度, 计算方式为: strlen(data)
QByteArray::QByteArray(const char *data, int size = -1);
// 构造一个长度为size个字节, 并且每个字节值都为ch的字节数组
QByteArray::QByteArray(int size, char ch);
//QByteArray 字节数组的使用
QByteArray array(5, 'A'); //存储5个字符'A'的字节数组
qInfo() << array;
QByteArray name = "yes";
qInfo() << name;
2.数据操作
基本数据操作
const char* str = "hello";
QByteArray name1(str);
qInfo() << "原字符串:" << name1;
//头部追加
name1.push_front("juny, ");
name1.prepend("Hi ");
qInfo() << "头部追加:" << name1;
//尾部追加
name1.push_back(" world");
name1.append("!");
qInfo() << "尾部追加:" << name1;
//指定位置插入
name1.insert(3, "good ");
qInfo() << "3的位置追加:" << name1;
//数据删除
name1.remove(3, 5); //从3的位置删除5个
qInfo() << "3的位置删除5个:" << name1;
//尾部删除
name1.chop(1);
qInfo() << "尾部删除一个:" << name1;
//保留前面,截断后面
name1.truncate(6);
qInfo() << "截断6后面所有字符:" << name1; //包括位置6上的字符
字节数组查找操作
//清空字节数组
name1.clear();
qInfo() << "清空后:" << name1;
//字符查找
name1 = "I'm cat,is very good, and you?";
qInfo() << "m第一次出现的index:" << name1.indexOf('m'); //返回index
qsizetype pos = name1.indexOf('o');
qInfo() << "o第一次出现的位置为:" << pos;
pos = name1.lastIndexOf('o');
qInfo() << "o最后一次出现的位置为:" << pos;
//判断name1中是否包含一个子串
if (name1.contains("very"))
{
qInfo() << "name1 中包含 very";
}
//判断name1中是否以I开始以?结束
if (name1.startsWith("I") && name1.endsWith("?"))
{
qInfo() << "name1中是以I开始以?结束的";
}
字节数组遍历操作
//字节数组的遍历
qInfo() << "---------------------------";
name1 = "LOVE";
for (auto& v : name1)
{
qInfo() << v;
}
qInfo() << "---------------------------";
for (int i = 0; i < name1.size(); i++)
{
qInfo() << name1[i]; //下标法
qInfo() << name1.at(i); //java风格访问
}
qInfo() << "---------------------------";
QByteArray::iterator iter = name1.begin();
for (iter; iter != name1.end(); iter++)
{
qInfo() << *iter;
}
字节数组与其它类型之间的转换
//QByteArray --> char*
qInfo() << name1.data(); //返回值为char*
qInfo() << name1.constData(); //返回值为const char*
//基本数据类型 --> QByteArray
QByteArray num;
num.setNum(1314520, 16); //将参数一转换为16进制字符串
qInfo() << num; //"140ed8"
num.setNum(3.1415926, 'e', 3); //小数位数三位
qInfo() << num; //"3.142e+00"
num.setNum(3.1415926, 'g', 3); //有效位数三位
qInfo() << num; //"3.14"
//静态函数的使用
qInfo() << QByteArray::number(3.1415, 'g', 2); //"3.1"
//QByteArray --> 基本数据类型
QByteArray sum("666");
qInfo() << sum.toInt(); //666
qInfo() << QByteArray("10000000000").toInt(); //若数据越界,返回值为0
bool isOk = false;
sum = "10";
uint n = sum.toUInt(&isOk, 16); //16标识的是原来sum中的数为16进制数
if (isOk)
{
qInfo() << n; //16
}
字符串(QString)
QString也是封装了字符串, 但是内部的编码为
utf8
, UTF-8属于Unicode字符集, 它固定使用多个字节(window为2字节, linux为3字节)来表示一个字符,这样可以将世界上几乎所有语言的常用字符收录其中。
1.构造函数
// 构造一个空字符串对象
QString();
// 将 char* 字符串 转换为 QString 类型
QString(const char *str);
// 将 QByteArray 转换为 QString 类型
QString(const QByteArray &ba);
2.数据操作
//QString 是自带编码的
QString name("Junk is very good teacher!Good GOOD GOod!");
qInfo() << name;
//替换
//Qt::CaseSensitivity::CaseInsensitive 替换时忽略大小写
name.replace("good", "bad", Qt::CaseSensitivity::CaseInsensitive);
qInfo() << name;
//格式化字符串
QString _name = "Mary";
qint32 age = 18;
QString job = "打螺丝";
qInfo() << _name + QString::number(age) + job;
qInfo() << QString::asprintf("我是%s,今年%d岁,我的工作是%s",
_name.toStdString().data(), age,
job.toStdString().data());
qInfo() << QString("我是%1,今年%2岁,我的工作是%3")
.arg(_name)
.arg(age)
.arg(job);
//输出时间
quint32 second = 3600520;
auto str = QString("%1天,%2:%3:%4")
.arg(second / 3600 / 24)
.arg(second % 24, 2, 10, QChar('0')) //输出宽度2 十进制 填充字符
.arg(second % 60)
.arg(second % 24 % 60);
qInfo() << str;
QByteArray与QString的区别
//获取本地编码
QString s("哈hello");
qInfo() << "本地编码:" << s.toLocal8Bit();
//获取utf8编码
qInfo() << "utf8编码:" << s.toUtf8();
QByteArray array("go home!");
QString str("go home!");
qInfo() << array.size(); //8 字节个数
qInfo() << str.size(); //8 字符个数
qInfo() << "array:" << array;
qInfo() << "str:" << str;
QByteArray array1("go home!哈");
QString str1("go home!哈");
qInfo() << array1.size(); //11 字节个数
qInfo() << str1.size(); //9 字符个数
qInfo() << "array:" << array1;
qInfo() << "str:" << str1;