我想在Qt中将数组转换为QByteArray。有人可以解释这个概念吗?请举例说明。
答案 0 :(得分:3)
QByteArray
有一个constructor可以做到这一点。
这是如何使用它:
const char* data; int size; // these variables should be correctly set to your array and size
QByteArray ba(data, size);
我使用了一个数据指针,但是当作为参数传递时,数组会衰减到指针,所以它是相同的。此构造函数将生成数据的深层副本。这意味着它只会获取它所创建的副本的所有权,如果动态分配,您使用的数据可能需要被释放。
对于除char
之外的其他类型的数组,您实质上是在进行序列化:
int data[30];
for (int i = 0; i < 30; ++i)
{
ba.append((const char*)(data + i), sizeof(int));
}
上面的代码会将构成您的整数的字节插入QByteArray
。但要小心,因为此时索引QByteArray
不会返回整数,而是返回它们的字节。
要转换QString(这不是您提出的要求,但添加了评论请求),请使用QString
的相应成员函数之一:
QByteArray ba = str.toLocal8bit();
QByteArray ba2 = str.toLatin1();
QByteArray ba3 = str.toUtf8();
QByteArray ba4 = str.toAscii();
要决定使用哪一个,您必须知道字符串的编码。要在编码之间进行转换,请使用QTextCodec
答案 1 :(得分:0)
一阵什么?假设你的意思是一个空终止的char数组:
#include <QtCore>
int main(int argc, char *argv[])
{
const char* myArray = "Hello World!";
QByteArray myByteArray = QByteArray(myArray);
}
答案 2 :(得分:0)
要在QByteArray中存储数组我已经采用了这里描述的方法:http://smartqt.blogspot.ru/2014/05/how-to-convert-struct-in-and-from.html
我的int数组版本是
QByteArray serialize(int* ar, int ar_size)
{
QByteArray result;
QDataStream stream (&result, QIODevice::WriteOnly);
stream<<ar_size;
for (int i=0; i<ar_size; i++)
stream<<ar[i];
return result;
}
void deserialize(const QByteArray& byteArray)
{
QDataStream stream(byteArray);
int ar_size=0;
stream>>ar_size;
int* ar = new int[ar_size];
for (int i=0; i<ar_size;i++)
stream>>ar[i];
}
干杯!