Qt-QByteArray字符处理

一、基本操作

1、访问与赋值

    访问QByteArray主要有4种方式,分别为[]、at()、data[]和constData[]。其中[]和data[]为可读可写,at()和constData[]仅为可读。如果仅是读,则通过at()和constData[]访问速度最快,因可避免复制处理。示例如下:

QByteArray ba;

ba.resize(1);

方式1 ba[0] = 0x3c;

方式2 ba.data()[0] = 0x31;

方式3 ba.at(0) //只读

方式4 ba.constData()[0] //只读

 

2、数据转换

QByteArray与char、int、float、QString

QByteArray转char*

方式1 传统方式data()和size()函数 (方便)

QByteArray array(10, 'Q');//初始化

char *buf = array.data();

int len = array.size();

 

方式2 使用memcpy()方式 (灵活)

QByteArray array(9,'Q');

char buf[10];//数组

int len_array = array.size();

int len_buf = sizeof(buf);

int len = qMin( len_array, len_buf );

// 转化

memcpy( buf, array, len );

 

QByteArray转int

QByteArray strInt("1234");

strInt.toInt(); // return 1234

strInt.toInt(&ok0,16); // return 4660, 默认把strInt作为16进制的1234,对应十进制数值为4660

 

QByteArray转float、double

QByteArray string("12.5");

string.toFloat(); // return 12.5

string.toDouble(); // return 12.5

 

QByteArray转为Hex字符形式16进制

QByteArray ba;

ba.resize(3);

ba[0] = 0x30;

ba[1] = 0x31;

ba[2] = 0x32;

ba.toHex(); //return "303132"

ba.toHex().toInt(&ok0,16); //return 303132

 

QByteArray与QString字符串互转

QByteArray ba("abc123");

QString str = ba;

 

char、int、float、QString转QByteArray

QString转QByteArray

QString str("abc123");

QByteArray ba = str.toLatin1();

 

char、int、float转QByteArray

QByteArray byte_head,byte_data;

byte_head.resize(4);

byte_data.resize(4);

memcpy(byte_head.data(),&int_head,sizeof(int_head));

memcpy(byte_data.data(),&int_data,sizeof(int_data));

int n = 63;

QByteArray::number(n);              // returns "63"

QByteArray::number(n, 16);          // returns "3f"

QByteArray::number(n, 16).toUpper();  // returns "3F"

QByteArray ba;

int n = 63;

ba.setNum(n);           // ba == "63"

ba.setNum(n, 16);       // ba == "3f"

 

二、QByteArray类函数

1、大小写 toLower、toUpper

QByteArray x("Qt by THE QT COMPANY");

小写 QByteArray y = x.toLower(); // y == "qt by the qt company"

大写QByteArray z = x.toUpper();// z == "QT BY THE QT COMPANY"

 

2、获取大小、数据、数组大小data()、size()、resize()

QByteArray array(10, 'Q');//初始化

char *buf = array.data();

int len = array.size();

array.readAll()//串口通讯中接收所有数据

array.resize()设置数组的大小,并初始化每个字节的数据字节

 

3、向前、向后追加、替换字符

QByteArray x("and");

x.prepend("rock ");         // x == "rock and"  前置

x.append(" roll");          // x == "rock and roll" 附加

x.replace(5, 3, "&");       // x == "rock & roll" 替代

 

4、提取多个字节 使用 left(),right() 或mid()

left:取字符串左侧4位

QByteArray x("Pineapple");

QByteArray y = x.left(4); // y == "Pine"

 

right:取字符串右侧3位

QByteArray x("Pineapple");

QByteArray y = x.right(3); // y == "ple"

 

mid:从第1 个后截取后面3个字符:

QByteArray x("Pineapple");

QByteArray y = x.mid(1,3); // y == "ine"

 

5、查找QByteArray中特定字符或子字符串的所有出现,使用indexOf()、lastIndexOf()

向前搜索indexOf

向后搜索lastIndexOf

返回该字节数组中第一次出现字节数组ba的索引位置,从索引位置向前搜索。如果找不到ba,则返回-1 

QByteArray x("sticky question");

QByteArray y("sti");

x.indexOf(y);               // returns 0

x.indexOf(y, 1);            // returns 10

x.indexOf(y, 10);           // returns 10

x.indexOf(y, 11);           // returns -1

 

6、检测是否包含字串contains

存在字符返回true,否则返回false

QByteArray s("array");

bool b = s .contains("arr",) //true

 

7、将所有字符重置为某个数fill()

类似c语音memset

QByteArray array;

先设置大小 array.resize(5) //初始化5个字节

fill('0',5) // "00000"

 

8、检测是否为空isEmpty、isNull如果字节数组的大小为0,返回true; 否则返回false。

QByteArray().isNull(); // returns true

QByteArray().isEmpty(); // returns true

QByteArray("").isNull(); // returns false

QByteArray("").isEmpty(); // returns true

QByteArray("abc").isNull(); // returns false

QByteArray("abc").isEmpty(); // returns false

 

你可能感兴趣的:(Qt学习,qt,字符串)