簡體   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