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

Reply via email to