网站建设技术网站,刚做网站和搜出来的不一样,外贸推广建站公司,wordpress 建立相冊QT字节数组类QByteArray 初始化访问某个元素截取字符串获取字节数组的大小数据转换与处理Hex转换数值转换与输出 字母大小写转换字符串数值转化为各类数值QBQyteArray和char*互转QByteArray 和std::string互转与字符串QString互转QByteArray和自定义结构体之间的转化判断是否为… QT字节数组类QByteArray 初始化访问某个元素截取字符串获取字节数组的大小数据转换与处理Hex转换数值转换与输出 字母大小写转换字符串数值转化为各类数值QBQyteArray和char*互转QByteArray 和std::string互转与字符串QString互转QByteArray和自定义结构体之间的转化判断是否为空向前搜索向后搜索插入 初始化
#include myqbytearray.h
#include ui_myqbytearray.h
#include QDebug
#include QtGlobalMyQByteArray::MyQByteArray(QWidget *parent) :QWidget(parent),ui(new Ui::MyQByteArray)
{ui-setupUi(this);qDebug()字节数组类的初始化;QByteArray ba(hello);if(\0ba[5]){printf(ba[5]\\\0\\n);}QByteArray ba2(china);ba2.fill(q);qDebug()ba2;if(\0ba2[5]){printf(ba2[5]\\\0\\n);}ba2.fill(x,2);qDebug()ba2;if(\0ba[5]){printf(new : ba2[5]\\\0\\n);}}MyQByteArray::~MyQByteArray()
{delete ui;
}字节数组类以 ‘\0’结尾索引的下标从0开始。 第一次调用fill函数不指定size参数按照之前的长度跟新值 第二次调用fill函数指定size参数重新调整字节数组的长度并更新值
访问某个元素
访问QByteArray类对象的某个元素有4种方式
[]at()data[]constData[]
其中[]和data[]可读可写at()和constData[]只读、
MyQByteArray2::MyQByteArray2(QWidget *parent) :QWidget(parent),ui(new Ui::MyQByteArray2)
{ui-setupUi(this);QByteArray ba1(hello);ba1.resize(10);ba1[0] a;ba1[1] b;ba1[2] c;ba1[3] d;ba1[4] e;ba1[5] f;ba1[6] g;ba1[7] h;ba1[8] i;//ba1[9] j;qDebug()ba1;if(\0ba1[10]){printf(ba1[10] \\\0\\n);}ba1[1]a;ba1.data()[2] a;qDebug()ba1;qDebug()ba1.at(1);qDebug()ba1.constData()[2];qDebug()ba1.constData()[3];}截取字符串
使用函数 left() right() mid()来提取多个字节。
MyQByteArray3::MyQByteArray3(QWidget *parent) :QWidget(parent),ui(new Ui::MyQByteArray3)
{ui-setupUi(this);QByteArray x(pineapple);QByteArray y1 x.left(4);qDebug()y1;QByteArray y2 x.right(5);qDebug()y2;QByteArray y3 x.mid(2,4);qDebug()y3;QByteArray y4 x.mid(2);qDebug()y4;}获取字节数组的大小
成员函数size(),length(),count()来获得字节数组的大小除了名字不同这3个函数是相同的
int size()int length()int count()
size()不包括字符串末尾添加的 ‘\0’ 如果以字符串形式初始化中间有‘\0’则不统计后面的字符。 如果改变中间的字符为‘\0’并不会被size()截断
MyQByteArray4::MyQByteArray4(QWidget *parent) :QWidget(parent),ui(new Ui::MyQByteArray4)
{ui-setupUi(this);QByteArray b4(hello);int n1 b4.size();int n2 b4.size();int n3 b4.size();qDebug()n1 n2 n3 ;b4.data()[3]\n;qDebug()b4.size();QByteArray b41(he\0llo);qDebug()b41.size();
}数据转换与处理
Hex转换
QByteArray::fromHex() 将16进制编码的数据转换为字符类型的数据。 .toHex() 将字节数组中字符转换为十六进制的数值编码。
MyQByteArray5::MyQByteArray5(QWidget *parent) :QWidget(parent),ui(new Ui::MyQByteArray5)
{ui-setupUi(this);QByteArray text1 QByteArray::fromHex(517420697320677265617421);qDebug()text1.data();QByteArray text2 text1.toHex();qDebug()text2.data();
}数值转换与输出
QByteArray类的公有静态函数number完成十进制到其他进制的转换。 调用静态成员函数 int n 63;qDebug()QByteArray::number(n);qDebug()QByteArray::number(n,16);qDebug()QByteArray::number(n,2);qDebug()QByteArray::number(n,8);QByteArray类的的公有函数setNum() qDebug()ba;ba.setNum(n,16);qDebug()ba;ba.setNum(n,8);qDebug()ba;ba.setNum(n,2);qDebug()ba;QByteArray::number 将小数按指定格式的小数位转换输出。 QByteArray ba1 QByteArray::number(12345.6,E,3);QByteArray ba2 QByteArray::number(12345.6,e,3);QByteArray ba3 QByteArray::number(12345.6,f,3);QByteArray ba4 QByteArray::number(12345.6,g,3);QByteArray ba5 QByteArray::number(12345.6,G,3);qDebug()ba1;qDebug()ba2;qDebug()ba3;qDebug()ba4;qDebug()ba5;字母大小写转换
函数toUpper和toLower完成字母大小写转换。 QByteArray x(hello QT );qDebug()x.toLower();qDebug()x.toUpper();字符串数值转化为各类数值
字符数值转化为各类型数值to函数。 QByteArray strint(1234);bool ok0;qDebug()strint.toInt();qDebug()strint.toInt(ok0,16);qDebug()ok0;qDebug()strint.toInt(ok0,8);qDebug()ok0;qDebug()strint.toInt(ok0,2);qDebug()ok0; //由于字符串中存在234等大于2的值所以不能转化为二进制qDebug()---------;QByteArray strint2(1234.56);qDebug()strint2.toInt();qDebug()strint2.toFloat();qDebug()strint2.toDouble();qDebug()---------;QByteArray str(FF);bool ok2;qDebug()str.toInt(ok2,16);qDebug()str.toInt(ok2,10); //字符串中存在F,超过了10和8进制的表示范围。qDebug()str.toInt(ok2,8);QBQyteArray和char*互转
使用.data()成员函数返回指向字节数组中存储数据的指针。 返回一个指向字节数组的指针指向第一个字符。
MyQByteArray8::MyQByteArray8(QWidget *parent) :QWidget(parent),ui(new Ui::MyQByteArray8)
{ui-setupUi(this);QByteArray ba(hello world);char* data ba.data();while(*data){cout *data;data;}coutendl;free(data);
}QByteArray 和std::string互转
QByteArray的类成员函数toStdString() QByteArrayd的静态成员函数fromStdString()
MyQByteArray9::MyQByteArray9(QWidget *parent) :QWidget(parent),ui(new Ui::MyQByteArray9)
{ui-setupUi(this);QByteArray b1(hello);string s2 b1.toStdString();QByteArray b2 QByteArray::fromStdString(s2);
}与字符串QString互转
MyQByteArray10::MyQByteArray10(QWidget *parent) :QWidget(parent),ui(new Ui::MyQByteArray10)
{ui-setupUi(this);QByteArray arr(hello world! );QString str arr;qDebug()str;qDebug()------------;QString str2 (hello);QByteArray ba str2.toLatin1();qDebug()ba;
}QByteArray和自定义结构体之间的转化
定义结构体不能再类中。。。。
根据char*数据和结构体之间的映射实现结构体和QByteArray之间的转化。
array.append((char*)msg,sizeof(msg));typedef struct Header{int channel;int type;
}Header;typedef struct Msg{Header header;char content[128];//友元函数 operatorfriend QDebug operator (QDebug os, Msg msg){os ( channel: msg.header.channel type: msg.header.type content: msg.content );return os;}
}Msg;typedef struct PeerMsg
{PeerMsg(const int ip,const int por) {ipv4 ip;port por;}int ipv4;int port;//友元函数 operatorfriend QDebug operator (QDebug os, PeerMsg msg){os ( ipv4: QString::number(msg.ipv4) port: QString::number(msg.port) );return os;}
}PeerMsg;void func(){Msg msg;msg.header.channel 1000;msg.header.type2;strcpy(msg.content,hello);qDebug()msg;PeerMsg peermsg(1921681001,10086);qDebug()peermsg;qDebug()struct to QByteArray;QByteArray array;array.append((char*)msg,sizeof(msg));Msg* pMsg (Msg*)array.data(); //将结构体转换为QByteArrayqDebug()*pMsg;qDebug()QByteArray to struct;QByteArray totalByte;totalByte.append((char*)peermsg,sizeof(peermsg));PeerMsg* pPeerMsg (PeerMsg*)totalByte.data(); //将结构体转换为QByteArrayqDebug()*pPeerMsg;}判断是否为空
.isEmpty()
MyQByteArray11::MyQByteArray11(QWidget *parent) :QWidget(parent),ui(new Ui::MyQByteArray11)
{ui-setupUi(this);qDebug()QByteArray().isEmpty();qDebug()QByteArray(ss).isEmpty();}向前搜索向后搜索
.indexof() 从前向后 .lastIndexOf 从后向前 QByteArray x(sticky question);QByteArray y(sti);qDebug()x.indexOf(y);qDebug()x.indexOf(y,6);qDebug()x.indexOf(y,10);qDebug()x.indexOf(y,11);qDebug()x.lastIndexOf(y);qDebug()x.lastIndexOf(y,8);插入 QByteArray ba(Meal);ba.insert(2,hello);qDebug()ba;