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 Java Discussion :

Double signé hexa (string) vers double


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de BakaOnigiri
    Inscrit en
    Avril 2002
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 366
    Par défaut Double signé hexa (string) vers double
    Bonjour,

    bon je sais pas si mon titre est bien parlant, mais voici mon problème :

    j'ai une chaine de caractères (16) qui représente un double signé, comment la convertir vers un Double ?

    J'ai des exemples (normalement ils sont bon ) :

    22576B4626F390C0 -> -1084.787378
    521652079208A840 -> 3076.285212
    986CFCB763172EC0 -> -15.045683

    Merci d'avance.

  2. #2
    Membre éclairé Avatar de BakaOnigiri
    Inscrit en
    Avril 2002
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 366
    Par défaut
    Bon, ba j'ai réussir à avoir ce que je voulais :

    j'ai convertis le code javascript de cette page (http://babbage.cs.qc.edu/IEEE-754/64bit.html) en classe java.

    Merci.

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    Si tu l'as résolu, tu pourrais peut-être indiquer ta manière de procéder ?

    En voici une, d'ailleurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String doubleAsHex = ...;
     
    Double.longBitsToDouble(Long.parseLong(doubleAsHex, 16));

  4. #4
    Membre éclairé Avatar de BakaOnigiri
    Inscrit en
    Avril 2002
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 366
    Par défaut
    Woua ! ce code semble super, mais hélas, certaines de mes valeurs ne se convertissent pas, en fait chaque valeur qui est négative

    Exemple: ix est la valeur hexa à convertir, la première valeur après la flèche est la valeur convertie avec mon adaptation du code js du lien que j'ai donné en deuxième post, et la deuxième valeur (après le tiret) est ce que me donne ton code, si une exception arrive, je trace "ERREUR !" :

    ix = C090F326466B5722
    -> -1084.7873780033046 - ERREUR !

    ix = 40A8089207521652
    -> 3076.2852121021506 - 3076.2852121021506

    ix = C02E1763B7FC6C98
    -> -15.045682668269635 - ERREUR !

    ix = 4001111111111111
    -> 2.1333333333333333 - 2.1333333333333333

    ix = 40263E89229E57FA
    -> 11.12214000876337 - 11.12214000876337

    ix = 403966CA5EDBFF52
    -> 25.401525429449357 - 25.401525429449357

    ix = C0228E91C2D8E1D9
    -> -9.278455819105988 - ERREUR !

    ix = 40266000132146E2
    -> 11.187500570118065 - 11.187500570118065

    ix = 401DFA18F3CD3D98
    -> 7.49423581066312 - 7.49423581066312
    En fait java ne semble pas aimé de l'hexa signé

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    Si ce n'est que ça, tu peux détecter le premier caractère. S'il vaut 8 ou plus grand (en hexa), enlève 8 et retiens-le.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int i = Integer.parseInt(s.substring(0), 16);
    if (i >= 8) {
      String str = Integer.toString(i - 8) + s.substring(1);
      long l = (0x8000000000000000L | Long.parseLong(str, 16));
      return Double.longBitsToDouble(l);
    } else {
      return Double.longBitsToDouble(Long.parseLong(str, 16));
    }
    Une autre méthode sur une ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String str = ...;
    double d = Double.longBitsToDouble(Long.parseLong(str.substring(0,8), 16) << 32 | Long.parseLong(str.substring(8,16), 16));

  6. #6
    Membre éclairé Avatar de BakaOnigiri
    Inscrit en
    Avril 2002
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 366
    Par défaut
    MERCI BEAUCOUP !

    C'est nettement plus propre que mon code, et plus simple aussi !

    Merci encore .

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

Discussions similaires

  1. convertir un type string vers un type double
    Par hegros dans le forum C#
    Réponses: 2
    Dernier message: 16/06/2010, 09h11
  2. Réponses: 2
    Dernier message: 27/01/2009, 10h30
  3. Réponses: 11
    Dernier message: 04/12/2008, 10h36
  4. Conversion hexa vers double
    Par EnigmuS dans le forum C
    Réponses: 13
    Dernier message: 16/05/2007, 14h06
  5. String vers un Double
    Par hugoferd dans le forum Langage
    Réponses: 1
    Dernier message: 16/10/2005, 20h46

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