2010-05-05 7 views
4

Existe-t-il un moyen rapide de convertir une valeur flottante en une représentation hexadécimale (hex) dans un QByteArray?Conversion de float en QByteArray

Avoir fait similaire avec memcpy() avant d'utiliser des tableaux, mais cela ne semble pas fonctionner correctement avec QByteArray.

Par exemple:

memcpy(&byteArrayData,&floatData,sizeof(float)); 

peut-il aller dans l'autre sens très bien à l'aide:

float *value= (float *)byteArrayData.data(); 

Suis-je juste mal ou l'exécution du présent est-il une meilleure façon de le faire en utilisant Qt?

Merci

Répondre

17

Sur la page QByteArray Class Reference:

float f = 0.0f; 
QByteArray array(reinterpret_cast<const char*>(&f), sizeof(f)); 

REINITIALISERA un QByteArray avec le contenu de la mémoire du flotteur stockés.

Si vous avez déjà un et que vous voulez juste ajouter les données à ce:

array.append(reinterpret_cast<const char*>(&f), sizeof(f)); 

devrait le faire aussi bien.

Pour aller dans l'autre sens, il vous suffit d'effectuer l'opération inverse:

float f2; 

if (array.size() >= sizeof(f2) 
{ 
    f2 = *reinterpret_cast<const float*>(array.data()); 
} else 
{ 
    // The array is not big enough. 
} 
3

Je ne sais pas ce que vous voulez exactement.

Pour farcir la représentation binaire en une QByteArray vous pouvez utiliser ceci:

float f = 0.0f; 
QByteArray ba(reinterpret_cast<const char *>(&f), sizeof (f)); 

Pour obtenir une représentation hexadécimale du flotteur, vous pouvez ajouter ceci:

QByteArray baHex = ba.toHex(); 
+0

L'utilisation d'un casting de style C est *pas une bonne idée. – ereOn

+0

@ereOn, c'est discutable. Dans cet exemple ce n'est pas grave, je l'ai utilisé pour ne pas taper le long casting de réinterprétation. – CMircea

+0

Et si 'f' était const? Vous auriez effacé la constance pendant que 'reinterpret_cast <>' aurait généré une erreur de compilation. Être paresseux avec les touches ** jamais ** paie. – ereOn