2011-12-06 59 views
-1

我想在Qt中將數組轉換爲QByteArray。有人可以解釋這個概念嗎?請舉一個例子。如何將數組轉換爲QByteArray?

+0

這裏(http://doc.qt.nokia.com/latest/qbytearray.html)是一些示例代碼和文檔。 – v01d

+0

http://stackoverflow.com/questions/6629534/c-hex-string-to-byte-array看看是否有效。 –

回答

0

數組是什麼?假設你的意思是一個空終止字符數組:

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

考慮我正在使用。,Qstring name = name [i];那我怎麼能把它轉換成Qbytearray? – Naufal

+0

@Naufal在你的例子中,'name'是QString類的一個實例,而不是C++數組。 –

+0

其實,我將它轉換爲bytearray,然後我想將其轉換爲qstring來獲取圖像! – Naufal

3

QByteArrayconstructor,不只是這個。

這是如何使用它:

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

+0

在此解決方案中,您使用了append方法。 '+ ='操作員是否也能工作? – Xofo

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

乾杯!