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 :

[Java] Conversion String en Hexa


Sujet :

Langage Java

  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 113
    Par défaut [Java] Conversion String en Hexa
    Bonjour à toute la communauté,

    Je sais que ce problème a été posé à de nombreuses reprises mais je n'ai pas trouvé la solution à mon problème particulier.

    En fait, j'ai une chaine de caractère de type : "0000001111111111000000000000002300000001270711805271".
    Je cherche à convertir celle-ci en hexadécimal. Pour le moment, je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    final BigInteger biChaine = new BigInteger(chaine);
    System.out.println(biChaine);
    chaine= biChaine.toString(16);
    System.out.println(chaine);
    Or, cela me renvoie cela :
    1111111111000000000000002300000001270711805271
    31d2ee15d5a0820ae01e9de0406cabc2c36557

    On constate donc que les "0" de poids fort ont été effacés et n'apparaissent pas dans l'hexadécimal. Or, il me faut ceux-ci.

    J'aimerais donc avoir, si possible :
    - Soit la logique permettant de passer directement d'une chaine de décimales en une chaine en hexadécimal ;
    - Soit la méthode permettant d'avoir mon BigInteger non rogné ;

    Merci d'avance pour vos réponses.

    Avec mes respectueuses salutations.

  2. #2
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 113
    Par défaut
    Bonjour,

    A la limite, si personne ne voit de solution, serait-il possible de savoir la taille hexadécimal d'un élément décimal. Ainsi, je calculerai la taille de l'hexadécimal de sortie à partir du nombre de décimal du String, je convertirai en BigInteger, puis en hexadécimal, et je rajouterai dans la String de sortie les "0" qui manquent avant mon code hexadécimal.

    D'avance merci de me dire si c'est une bonne idée et, si oui, comment y arriver.

    Avec mes respectueuses salutations.

  3. #3
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Tu peux utiliser la méthode System.out.printf() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    String value = "0000001111111111000000000000002300000001270711805271";
    BigInteger bigInt = new BigInteger(value);
    System.out.printf("%052d", bigInt);
    System.out.println();
    System.out.printf("%052X", bigInt);
    affiche
    0000001111111111000000000000002300000001270711805271
    0000000000000031D2EE15D5A0820AE01E9DE0406CABC2C36557
    Si tu veux récupérer la chaine pour autre chose il y a la méthode String.format(). Tu trouveras les informations sur le formatage et sa syntaxe dans la documentation de la classe Formatter .
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par Altrensa Voir le message
    On constate donc que les "0" de poids fort ont été effacés et n'apparaissent pas dans l'hexadécimal. Or, il me faut ceux-ci.
    Mais enfin, ça ne veut rien dire : il y en aurait combien, des zéros, en hexadécimal ?

    (Note que si tu as une réponse logique à cette question, le y@m's te dit comment afficher le nombre en 52 chiffres hexa. Il suffit de mettre le nombre de chiffres voulus à la place de 52.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 113
    Par défaut Solution utilisée
    Bonjour et merci pour vos réponses,

    Je me suis rendu compte que je me trouvais avec des entiers 64 bits (soit 16 octets, donc potentiellement 16 caractères hexadécimaux maximum). J'ai donc, grâce à vos idées, procédé comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    final String chaine1 = String.format("%016X", long1);
    final String chaine2 = String.format("%016X", long2);
    final String chaine3 = String.format("%016X", long3);
    final String chaineFinale = chaine1 + chaine2 + chaine3;
    J'obtiens donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    1111111111 //long1
    23 //long2
    1270729423578 //long3
    //Concaténation des longs (60 caractères)
    000000000011111111110000000000000000002300000001270729423578
     
    00000000423A35C7 //chaine1
    0000000000000017 //chaine2
    00000127DD603ADA //chaine3
    //Concaténation des chaines (48 caractères)
    00000000423A35C7000000000000001700000127DD603ADA
    Merci encore à tous pour votre aide.

    Avec mes respectueuses salutations.

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

Discussions similaires

  1. Conversion String en hexa char special
    Par Jahz dans le forum Langage
    Réponses: 1
    Dernier message: 03/08/2007, 15h52
  2. [Java] conversion String/Int
    Par maxime17s dans le forum Langage
    Réponses: 3
    Dernier message: 06/05/2007, 17h42
  3. Conversion String en Hexa ("1F") vers byte
    Par ducseb dans le forum Langage
    Réponses: 1
    Dernier message: 15/04/2006, 20h03
  4. [Java]Conversion de float en String et inversement
    Par djoukit dans le forum Langage
    Réponses: 7
    Dernier message: 13/10/2005, 11h55
  5. Conversion d'un string en hexa
    Par marsupilami34 dans le forum Langage
    Réponses: 3
    Dernier message: 07/07/2005, 09h13

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