Comment lire le fichier binary fortran en C?

J’ai un fichier binary généré par le code fortran. Ce fichier contient un tableau de doubles. J’ai besoin de l’ouvrir dans mon programme C puis de travailler avec elle comme avec un tableau habituel.

Comment fait-on ça?

Comment le type double est représenté dans un fichier binary?

    Presque tous les compilateurs Fortran, pour les fichiers séquentiels non formatés (c.-à-d. Binaires), écrivent la longueur de l’enregistrement au début et à la fin de chaque enregistrement. Généralement, la longueur est écrite sur quatre octets, bien que certains compilateurs utilisent huit octets. Un enregistrement est tout ce qui est écrit avec une seule déclaration d’écriture Fortran. Si ce tableau a été écrit avec une seule instruction d’écriture Fortran avec ce type de fichier, il vous rest alors quatre ou huit octets à ignorer, puis le tableau, puis quatre ou huit octets supplémentaires. Vous pouvez probablement comprendre cela en consultant le fichier avec un éditeur hexadécimal. Si le tableau a été écrit en morceaux (par exemple, par colonnes ou lignes) avec plusieurs instructions d’écriture, chaque enregistrement aura cette structure.

    Si le fichier est écrit par Fortran comme étant non formaté, le type double Fortran est écrit dans la représentation binary de cet ordinateur. Vous devriez pouvoir le lire en C sur le même type d’ordinateur. Si vous modifiez des architectures et pas seulement des langues, la représentation binary peut être différente.

    Fortran a d’autres méthodes d’access aux fichiers qui n’incluent pas les informations de longueur d’enregistrement. Accès direct, par exemple. La nouvelle méthode d’access aux stream est conçue pour la compatibilité entre langues.

    Si le tableau est multidimensionnel, vous souhaiterez peut-être le transposer car Fortran possède des tableaux à colonnes majeures, tandis que C utilise des lignes majeures.

    Questions connexes: format de fichier Fortran non formaté et lecture de fichier non formaté avec Python

    Vous ne pouvez pas, en principe.

    Le format des fichiers binarys Fortran n’est pas spécifié . Cela signifie que, bien que vous puissiez enregistrer l’état du programme dans un fichier binary Fortran et le rouvrir à l’ aide de la même implémentation Fortran , vous ne pouvez pas le faire de manière fiable, même avec une implémentation Fortran différente.

    Maintenant, il existe un nombre limité de façons de sauvegarder l’état, il est donc à la fois possible et probable que vous puissiez travailler sur la structure d’un fichier binary Fortran donné, avec suffisamment de détails pour que vous puissiez l’ouvrir dans un fichier. Programme C et lire le contenu. Cependant, cette connaissance est complètement spécifique au compilateur Fortran en question.

    La meilleure chose à faire est donc de créer un tableau Fortran contenant, par exemple, [0, 1, 2, 3, 4, 256, 65536, 65537, 1e10, 1e20, 1e30, 1e40] , de l’écrire dans un fichier binary regardez-le avec un éditeur binary pour voir ce qu’il y a.

    Après cela, vous êtes seul, j’ai bien peur …

    À mon avis, la meilleure façon de lire les fichiers binarys fortran est en fait de les lire depuis fortran et de passer tableau à C. Cela peut vous épargner beaucoup de douleur.

    1. Ecrivez un sous-programme capable de lire ce binary
    2. Enveloppez votre sous-routine pour l’appeler de C.

    Le plus difficile est d’envelopper votre sous-programme fortran. Les mutilations de noms ne sont pas simples entre C et fortran. Cela dépend du compilateur (c’est-à-dire de la plate-forme) et de la version Fortran que vous utilisez. Vous pouvez regarder ici et ici pour des exemples simples.

    Le premier choix est de le faire “à la main” avec les options de compilation appropriées.

    Astuces : pour connaître les difficultés, vous pouvez utiliser la commande nm sous Linux ou un outil tel que le visualiseur d’export DLL.

    Un meilleur choix consiste à utiliser Fortran 2003, qui introduit le module iso_c_binding, qui permet de gérer ce type d’opération.