繁体   English   中英

如何将数组转换为QByteArray?

[英]How to convert an array into QByteArray?

我想将数组转换为Qt中的QByteArray。 有人可以解释这个概念吗? 请提供一个例子。

QByteArray具有完成此任务的构造函数

这是使用方法:

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));
}

上面的代码会将构成int的字节插入QByteArray 但是要小心,因为此时索引QByteArray不会返回整数,而是返回组成它们的字节。

要转换QString (不是您要的,而是添加了询问的注释),请使用QString的适当成员函数之一:

QByteArray ba = str.toLocal8bit();
QByteArray ba2 = str.toLatin1();
QByteArray ba3 = str.toUtf8();
QByteArray ba4 = str.toAscii();

要决定使用哪一个,您必须知道字符串的编码。 要在编码之间进行转换,请使用QTextCodec

要将数组存储在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];
}

干杯!

什么数组? 假设您的意思是一个以null结尾的char数组:

#include <QtCore>
int main(int argc, char *argv[])
{
    const char* myArray = "Hello World!";
    QByteArray myByteArray = QByteArray(myArray);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM