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
_______________________________________________ gdal-dev mailing list [email protected] https://lists.osgeo.org/mailman/listinfo/gdal-dev
