Конвертировать из float в QByteArray - PullRequest
5 голосов
/ 05 мая 2010

Существует ли быстрый способ преобразования значения с плавающей запятой в байтовое (шестнадцатеричное) представление в QByteArray?

Проделали аналогичные действия с memcpy() перед использованием массивов, но, похоже, это не слишком хорошо работает с QByteArray.

Например:

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

Можно просто отлично пойти другим путем, используя:

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

Я просто неправильно это реализую или есть лучший способ сделать это с помощью Qt?

Спасибо

Ответы [ 2 ]

18 голосов
/ 05 мая 2010

из справочника по классам QByteArray страница:

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

Инициализирует QByteArray с содержимым памяти поплавка, хранящимся в нем.

Если он у вас уже есть и вы хотите добавить к нему данные:

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

Должен сделать то же самое.

Чтобы пойти по другому пути, вам просто нужно выполнить обратную операцию:

float f2;

if (array.size() >= sizeof(f2)
{
  f2 = *reinterpret_cast<const float*>(array.data());
} else
{
  // The array is not big enough.
}
3 голосов
/ 05 мая 2010

Я не уверен, что именно вы хотите.

Чтобы вставить двоичное представление в QByteArray, вы можете использовать это:

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

Чтобы получить шестнадцатеричное представление с плавающей точкой, вы можете добавить это:

QByteArray baHex = ba.toHex();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...