IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Lecture d'un fichier binaire écrit en java


Sujet :

Langage Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 5
    Par défaut Lecture d'un fichier binaire écrit en java
    Bonjour

    J'ai des fichiers écrit en java :

    La structure écrite en JAVA :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        public void toBytes(byte[] buff, int off) {
            off = putLong(buff, off, time);
            off = putDouble(buff, off, open);
            off = putDouble(buff, off, close);
            off = putDouble(buff, off, low);
            off = putDouble(buff, off, high);
            putDouble(buff, off, vol);
        }

    Quand je lis en Delphi avec : int64,Double,Double,Double,Double,Double j'ai n'importe quoi.
    L'ordre des octets ne dois pas être les mêmes.

    Quelqu'un a t'il une idée

    Merci
    PHIL

  2. #2
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    putLong n'est pas sur 32 bits ?
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 5
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    putLong n'est pas sur 32 bits ?
    La doc :
    Every field, excepting time, is 8-bytes long doubles, and time is 8-bytes long "long". The Total size of every block is 6 * 8 = 48 bytes.
    Le long est bien sur 64bits c'est une date avec des Millisecondes.

    Pour les doubles je pense qu'il faut inverser les quatre premier et dernier octets mais je ne sais comment faire pour retrouver mon double.

  4. #4
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    ok Java étant Big-Endian et Windows Little, il faut inverser les octets en effet
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 5
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    ok Java étant Big-Endian et Windows Little, il faut inverser les octets en effet
    Merci pour l'info, cela marche bien pour les int64 mais pas pour les doubles, il faut inverser les 4 premier et 4 dernier octets (malgré 25ans d'informatique je suis nul en ASM et Pointer).

    PHIL

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 5
    Par défaut Réponse
    Voici la fonction pour la conversion d'un double Big endian <> Little Endian

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function SwapDouble(var a:Double):double;
    var
      hold:double;
    asm
      mov edx,dword ptr[eax]
      mov ecx,dword ptr[eax+4]
      bswap edx
      bswap ecx
      mov dword ptr [hold],ecx
      mov dword ptr [hold+4],edx
      fld hold;
    end;
    Merci à Paul Toth pour s'être penché sur mon problème, cela me rappelle mes débuts en Pascal et Delphi 1 en 1996 sur un forum dont je ne me souviens plus du nom auquel j'ai participé et dont Paul était un des principaux animateur.

    Bonsoir

    PHIL

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lecture de fichier binaire fortran avec java
    Par bigbrother737 dans le forum Langage
    Réponses: 1
    Dernier message: 11/05/2007, 10h34
  2. lire un fichier binaire écrit en java
    Par alex'l dans le forum C++
    Réponses: 13
    Dernier message: 31/01/2007, 21h47
  3. lecture d'un fichier binaire
    Par Tonta dans le forum C++
    Réponses: 1
    Dernier message: 14/04/2006, 06h53
  4. lecture d'un fichier binaire en VB
    Par olivier] dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 28/12/2005, 11h17
  5. Lecture d'un fichier binaire
    Par Gloubie dans le forum Langage
    Réponses: 9
    Dernier message: 05/12/2005, 12h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo