C++ de l'écriture et de la lecture double à partir d'un fichier binaire

Je veux faire des disques opérations d'e/S pour un programme qui prend trop de RAM.
J'utilise des matrices de doubles et de penser à les écrire sur le disque comme des octets est le moyen le plus rapide (j'ai besoin de préserver la double précision).

Comment le faire avec la portabilité?

J'ai trouvé ce code ( ici ), mais l'auteur dit que c'est pas portable...

#include <iostream>
#include <fstream>

int main()
{
    using namespace std;

    ofstream ofs( "atest.txt", ios::binary );

    if ( ofs ) {
        double pi = 3.14;

        ofs.write( reinterpret_cast<char*>( &pi ), sizeof pi );
        //Close the file to unlock it
        ofs.close();

        //Use a new object so we don't have to worry
        //about error states in the old object
        ifstream ifs( "atest.txt", ios::binary );
        double read;

        if ( ifs ) {
            ifs.read( reinterpret_cast<char*>( &read ), sizeof read );
            cout << read << '\n';
        }
    }

    return 0;
}
Ce n'est pas portable car sizeof(double) peut être différent entre les plates-formes. Vous aurez besoin de vérifier cela, mais sinon l'exemple de code est ok.
Je serais plus inquiet à propos de l'ordre des octets de double parce que c'est plus enclin à changer (surtout si vous interagissez avec un matériel embarqué).
Vrai, bien que de parler et de penser en termes de "probable" est une mauvaise habitude. Si vous vous souciez vraiment de la portabilité, il n'y a pas de degrés.

OriginalL'auteur Andy | 2011-07-22