Я пытаюсь отправить некоторые двойные в дейтаграмме через udpSendSocket. Данные поступают из графического интерфейса QT и отправляются в драйверную программу VS2013 (как на C++). Я использую QDataStream для размещения данных в QByteArray, который затем отправляется. Все отлично работает для целых чисел, но я не могу заставить его работать в парном разряде.reinterpret_cast - double to char [] to double not working - C++
Я уже подтвердил, что мой код передачи работает так, что все, что находится в дейтаграмме, принимается программой драйвера, поэтому я выполняю все свое тестирование в программе QT.
Сначала я отправил двойное прямо в QDataStream, который утверждает, что использует IEEE 754, а затем использовал * reinterpret_cast, чтобы преобразовать его обратно в double.
// QT Program
QByteArray datagram;
QDataStream out(&datagram, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_5_1);
out.setFloatingPointPrecision(QDataStream::SinglePrecision);
double test = 0.3;
out << test;
double recv = *reinterpret_cast<double*>(&datagram);
С этим recv = 2.32e-317.
После этого не сработало, я сосредоточился на попытке преобразования двоичного массива в байтовый массив обратно в double. Несколько источников привели меня к мысли, что это сработает, но это не так.
double test = 0.3;
unsigned char const* bytes = reinterpret_cast<unsigned char const*>(&test);
double recv = *reinterpret_cast<double*>(&bytes);
С этим recv = 1.33e-317.
SizeOf (двойной) возвращает 8.
Что я делаю неправильно с reinterpret_cast? Должен ли я делать это преобразование по-другому? Какие-либо предложения?
Благодаря
Спасибо AndyG и Angew. Оба ваших ответа были очень полезными. – Doggman9