QT之QByteArray

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<double>& x, QVector<double>& 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 QByteArray::fromHex(const QByteArray &hexEncoded)。例子如下:
QByteArray text = QByteArray::fromHex("517420697320677265617421");
text.data();            // returns "Qt is great!"
QByteArray QString::toLatin1() const。//返回Latin1格式的QByteArray。Latin1是ISO-8859-1的别名,有些环境下写作Latin-1。ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符,0xA0-0xFF之间是文字符号。

posted @ 2018-08-27 20:23  xianyongchao  阅读(4488)  评论(0编辑  收藏  举报