From 4af26f3aa110b16bd2fe3f3c9591b4d9c0da7b2b Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Fri, 29 Jan 2021 16:08:32 +0000 Subject: [PATCH] Support earlier versions of QT and fix type punning --- sdrbase/util/fits.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/sdrbase/util/fits.cpp b/sdrbase/util/fits.cpp index 20fb33a5c..9a0264196 100644 --- a/sdrbase/util/fits.cpp +++ b/sdrbase/util/fits.cpp @@ -16,7 +16,9 @@ /////////////////////////////////////////////////////////////////////////////////// #include +#include +#include #include #include #include @@ -28,8 +30,15 @@ FITS::FITS(QString resourceName) : { QResource m_res(resourceName); int m_headerSize = 2880; + qint64 m_fileSize; +#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) m_data = m_res.uncompressedData(); - int hLen = std::min((qint64)m_headerSize * 3, m_res.uncompressedSize()); // Could possibly be bigger + m_fileSize = m_res.uncompressedSize(); +#else + m_data = QByteArray::fromRawData((const char *)m_res.data(), m_res.size()); + m_fileSize = m_res.size(); +#endif + int hLen = std::min((qint64)m_headerSize * 3, m_fileSize); // Could possibly be bigger QByteArray headerBytes = m_data.left(hLen); QString header = QString::fromLatin1(headerBytes); QRegExp widthRE("NAXIS1 *= *([0-9]+)"); @@ -128,7 +137,13 @@ float FITS::value(int x, int y) return v * m_bscale + m_bzero; } else - return *reinterpret_cast(&v); + { + // Type-punning via unions apparently undefined behaviour in C++ + uint32_t i = (uint32_t)v; + float f; + memcpy(&f, &i, sizeof(f)); + return f; + } } float FITS::scaledValue(int x, int y)