6 votes

Conversion de float en QByteArray

Existe-t-il un moyen rapide de convertir une valeur flottante en une représentation en octets (hex) dans un fichier de données de l'entreprise ? QByteArray ?

J'ai fait de même avec memcpy() avant d'utiliser des tableaux, mais cela ne semble pas fonctionner très bien avec QByteArray .

Par exemple :

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

On peut très bien aller dans l'autre sens en utilisant :

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

Est-ce que je me trompe dans l'implémentation ou existe-t-il un meilleur moyen de le faire en utilisant Qt ?

Merci

21voto

ereOn Points 18624

De la Référence de classe QByteArray page :

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

Initialisera un QByteArray avec le contenu de la mémoire du flotteur qui y est stocké.

Si vous en avez déjà un et que vous voulez simplement y ajouter les données :

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

Cela devrait également être le cas.

Pour faire l'inverse, il 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.
}

4voto

CMircea Points 2037

Je ne suis pas sûr de ce que vous voulez exactement.

Pour placer la représentation binaire dans un QByteArray, vous pouvez utiliser ceci :

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

Pour obtenir une représentation hexagonale du flottant, vous pouvez ajouter ceci :

QByteArray baHex = ba.toHex();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X