1、拷贝内容到QByteArray
1.使用append函数 //结合结构体的(char*)强制转化使用,command.append((char*)&e2_System_Para_t, sizeof(e2_System_Para_t));
2.使用memcpy函数,用memcpy之前先调用resize函数分配内存
3.先resize,再使用[ ]函数
2、从QByteArray中提取数据,一般使用memcpy函数结合结构体,比较快捷
注意:
QByteArray test;test.append(0x0800); //test -->08。(小端)直接将0x0008转化为0x08。这里便只是添加了一个字节在test中。
3、将存储的ASCII码取出(取出其中的基本数据类型,这里以float举例)
void MyMethod::analysis0x08Packet(const QByteArray& ba, QVector& x, QVector & y){ int wiresCount = (ba.size() - 20) / 16; x.clear(); y.clear(); float tmpFloat=0; QByteArray temp; for (int i = 0; i < wiresCount; i++){ temp = QByteArray::fromHex(QString(ba.mid(17+16*i,8).data()).toLatin1()); memcpy(&tmpFloat, temp.data(), 4);
x.append(tmpFloat); temp = QByteArray::fromHex(QString(ba.mid(25 + 16*i, 8).data()).toLatin1()); memcpy(&tmpFloat, temp.data(), 4); y.append(tmpFloat); }}
注意:fromHex()和toLatin1()的使用
[static] QByteArray::fromHex(const &hexEncoded)。例子如下:
QByteArray text = QByteArray::fromHex("517420697320677265617421");text.data(); // returns "Qt is great!" ByteArray QString::toLatin1() const。//返回Latin1格式的ByteArray。Latin1是的别名,有些环境下写作Latin-1。ISO-8859-1编码是单编码,向下兼容,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是,0xA0-0xFF之间是文字符号。