Thanks to you both.

On Tue, 16 Jun 2020, Even Rouault wrote:

On mardi 16 juin 2020 11:02:55 CEST Mateusz Loskot wrote:
On Tue, 16 Jun 2020 at 10:08, Andrew C Aitchison <[email protected]> wrote:
Does gdal have a standard, endian-independent,
way to read floating point values from file ?
Specifically IEEE-754 little-endian 64bit values.

So far my driver has used a union to "cast" 8 bytes to a double,
but I now discover that, whilst this is valid C, it is not valid C++.
I am looking for a portable way to read such values from file
into a C++ double. This cannot be the first gdal driver to need to do
this.

Generally, use std::memcpy or std::copy.
Detect if you need to swap bytes and swap bytes.

A rather compact and portable way:

double x;
std::memcpy(&x, ..., sizeof(double));
CPL_LSBPTR64(&x); // if the ordering in the file is little-endian
CPL_MSBPTR64(&x); // if the ordering in the file is big-endian

--
Spatialys - Geospatial professional services
http://www.spatialys.com


--
Andrew C. Aitchison                                     Kendal, UK
                        [email protected]
_______________________________________________
gdal-dev mailing list
[email protected]
https://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to