2012-12-02 8 views
7

Sono necessari 4 byte per rappresentare un numero intero. Come posso memorizzare uno int in un QByteArray in modo che siano necessari solo 4 byte?Memorizzazione dell'intero in QByteArray utilizzando solo 4 byte

  • QByteArray::number(..) converte il numero intero in stringa occupando così più di 4 byte.
  • QByteArray((const char*)&myInteger,sizeof(int)) inoltre non funziona.
+0

In realtà, la seconda soluzione funziona :) È sufficiente eseguire il cast correttamente. Pubblicheremo una risposta quando il timer permetterà così di aiutare gli altri (sto vedendo un sacco di questa domanda ovunque, da nessuna parte correttamente risolta in un modo SO :)) –

+0

So che questo è un po 'vecchio, ma cosa intendi con ' lanciarlo correttamente? Ho provato a lanciarlo correttamente per le ultime 2 ore ..: D –

risposta

15

Ci sono diversi modi per effettuare un intero in un QByteArray, ma ciò che segue è di solito il più pulito:

QByteArray byteArray; 
QDataStream stream(&byteArray, QIODevice::WriteOnly); 

stream << myInteger; 

Questo ha il vantaggio di permettere di scrivere diversi numeri interi (o altri tipi di dati) alla matrice di byte abbastanza convenientemente. Permette anche di impostare la endianità dei dati usando QDataStream::setByteOrder.

+0

Non c'è alcuna garanzia nel documento che questo produrrà un archivio a 4 byte nell'array di byte. –

+3

@StephenChu In quale circostanza non produrrebbe una matrice a 4 byte (specialmente se 'myInteger' è di tipo' qint32' o 'quint32')? –