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

Java Discussion :

Convertir un nombre en plusieurs hexa


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 50
    Points : 38
    Points
    38
    Par défaut Convertir un nombre en plusieurs hexa
    Bonjour

    Alors, je m'explique,

    Par exemple j'ai :
    Je voudrais récupérer en gros : le "5" et le "4" afin d'obtenir : 0x35 et 0x34

    J'ai pensé à couper le int en deux parties mais j'ai pas trouvé.

    Si vous avez une solution, ou si vous voulez plus d'informations, je sis dispo.

    Merci d'avance,
    Cordialement, MrShanky

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Ce que tu demandes, c'est d'obtenir la liste des codes ASCII/UTF-8 des chiffres d'un nombre, en héxadécimal. Le moyen le plus simple c'est :

    Transformer le nombre en chaîne de caractères, avec String nombreString = String.valufOf(lenombre); ;
    Parcourir chaque caractère de cette chaîne (char c = nombreString.charAt(index));, et convertir sa valeur en hexa, avec String chiffreEnHexa = "0x" + Integer.toString( (int)c, 16);.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 50
    Points : 38
    Points
    38
    Par défaut
    Merci d'avoir répondu si vite, mais il me reste un truc que je ne comprend pas,
    A quoi correspond "index" dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char c = nombreString.charAt(index)
    ??

    Merci encore !

    Cordialement, MrShanky

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 50
    Points : 38
    Points
    38
    Par défaut
    Désoler double post

    En réfléchissant un peut, j'ai trouvé ! Merci à toi
    Voici la solution si d'autres personnes cherches :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int i = 54;
            String test = String.valueOf(i);
            for(int a=0;a<2;a++)
            {
                char c = test.charAt(a);
                String chiffreEnHexa = "0x" + Integer.toString((int)c, 16);
                System.out.println("a:"+chiffreEnHexa);
            }
    Je met [Resolu] au sujet. Merci encore

    Cordialement, MrShanky

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Presque,

    Si tu avais fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String test = String.valueOf(i);
    for(int a=0;a<test.length();a++) {
    ...
    Ton code pourra fonctionner quelque soit i, (même s'il vaut 345 ou 2014 par exemple).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 50
    Points : 38
    Points
    38
    Par défaut
    Ahhh pas bête, merci.

    Bon la en l’occurrence ca n'ira pas au dessus de 60 donc ca va ! (C'est pour envoyer l'heure et la date à une carte)

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 50
    Points : 38
    Points
    38
    Par défaut
    Bonjour,

    Alors excusez moi d'avoir clos le sujet si vite, mais je le ré ouvre car concrètement j'ai as réussis a faire ce que je voulais.

    Donc je résume, actuellement, j'ai un String avec 0x.., ca c'est bon, maintenant je voudrais les (j'en ai deux) ranger dans un tableau de Bytes[]
    Car en fait voici ce que je veux à la fin :

    Envoyer ceci à une carte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    byte[]tab = new byte[] {
                0x02,
                0x53, 0x44, 0x3b,               //Date
                0x59, 0x3d, 0x3., 0x3., 0x3b,   //Année
                0x4d, 0x3d, 0x3., 0x3b,         //Mois
                0x44, 0x3d, 0x3., 0x3., 0x3b,   //Jour
                0x68, 0x3d, 0x3., 0x3., 0x3b,   //Heure
                0x6d, 0x3d, 0x3., 0x3., 0x3b,   //Minute
                0x73, 0x3d, 0x30,               //Seconde
                0x03
            };
    Les "0x3." sont ceux que je veux pouvoir faire varié en fonction de ceux que j'ai précédemment récupérer sous fore de String.

    Merci,
    Cordialement, MrShanky

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Ça n'a rien à voir avec la question initiale : là, en fait, tu as juste besoin de remplir un tableau d'octet avec les codes ascii/utf-8 des caractères d'un nombre, en gros. Lorsque tu saisis ce genre de code, tu as besoin d'une représentation, et l'héxadécimal en est une, qui a ses avantages (alignement par exemple). Quand on remplit programmatiquement un tableau, on n'a pas besoin de représenter les valeurs, que ça soit en héxadécimal ou autre.

    Pour mettre un octet dans une case de tableau de byte, il suffit d'écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int valeur = ...,
    tableauDeByte[index] = (byte)valeur;
    Là, ta valeur est un code ascii de chiffre : donc la méthode que je t'ai donnée fonctionne toujours, sauf que tu n'as pas besoin de convertir à la fin avec Integer.toString(valeur,16);.

    Il y'a une autre façon d'aborder le problème : utiliser la classe ByteBuffer, qui va te permettre de ranger tes nombres, convertis en chaînes de caractères, par String.valueOf(), puis en tableau d'octets par getBytes("UTF-8"), (puisque ce sont les codes ascii/utf-8 (j'écris ça parce que les codes sont les mêmes dans les 2 encodages, pour ce qui concerne les chiffres de 0 à 9) que tu veux mettre dans le tableau), et en plus de gérer simplement l'endianess (l'ordre des octets).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    ..... Ou alors on fait juste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String message = String.format("\u0002SD;Y=%d;M=%d;D=%d;h=%d;m=%d;s=0\u0003", year, month, day, hour, minute);
    byte[] bytes = message.getBytes("us-ascii");
    Parce que bon, gérer les nombres sur un ou deux chiffres à partir de leur écriture numérique sous forme de tableau de bytes, c'est pas franchement le plus simple.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    J'avais pensé à une solution de ce genre (voir plus simple, avec un PrintStream), mais je me suis dit qu'il pouvait y avoir un problème d'endianess : je veux dire, selon la plateforme, ne risque-t-on pas d'obtenir un ordre différent dans le tableau final ? Si le but est d'envoyer ces données vers un autre système pour traitement, cela peut avoir son importance.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 50
    Points : 38
    Points
    38
    Par défaut
    Joel à pas tord, mais j'ai quand même essayé la technique de thelvin technique, et elle fonctionne !

    Dans tout les cas, Merci énormément à vous deux !

    Cette fois je met résolu et je recréerai un post si j'ai encore des soucis.

    Merci,
    Cordialement, MrShanky

  12. #12
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    C'est clairement une représentation texte et pas binaire. Pas d'endianness donc. La question pourrait se poser si on utilisait de l'UTF-16 ou -32 au lieu d'ASCII.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Oui, effectivement, j'ai focalisé sur la problématique d'endianess en pensant au cas général, mais sur du texte ascii, c'est vrai que ce n'est pas pertinent.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  14. #14
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par MrShanky Voir le message
    mais j'ai quand même essayé la technique de thelvin technique, et elle fonctionne !
    Je le sais bien qu'elle fonctionne. Mais est-ce que t'as seulement compris ce qui se passe ?
    Ton problème c'est que tu t'embrouillais avec une histoire de bytes sans queue ni tête, alors que tout ce que tu avais besoin de faire, c'est envoyer un texte du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SD;Y=14;M=6;D=3;h=13;m=24;s=0
    entouré de deux octets.

    Quand on doit envoyer du texte, on raisonne en String, pas avec des histoires d'octets en hexa ou non.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 50
    Points : 38
    Points
    38
    Par défaut
    Mais est-ce que t'as seulement compris ce qui se passe ?
    Au début pas vraiment, mais en fait c'est hyper logique ... Je me doutais bien qu'on pouvais le faire comme ca mais j'ai chercher sans succes ...

    c'est envoyer un texte du genre : SD;Y=14;M=6;D=3;h=13;m=24;s=0
    Oui, en effet, suand je regarde la documentation que j'ai, c'est sous cette forme la, mais au début j'ai essayé d'envoyer directement sous forme de String à la carte ...
    Mais ca marchais pas ducoup, j'ai essayer avec des Byte[] et ca marchais ... Je me suis pas poser plus de questions tant que je faisais des GET mais arrivé au SET OUCH en effet il fallait trouver une autre solution

    Merci vraiment ! :p

    Cordialement, MrShanky

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

Discussions similaires

  1. [C#] convertir un nombre hexa en int
    Par linux dans le forum C#
    Réponses: 5
    Dernier message: 08/12/2005, 16h38
  2. Convertir un nombre d'heure format HH:MM
    Par jerome_sinclair dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/11/2005, 21h51
  3. Comment convertir un nombre de jours décimal en date
    Par Soutou dans le forum Requêtes
    Réponses: 3
    Dernier message: 03/11/2005, 00h57
  4. Réponses: 4
    Dernier message: 06/06/2004, 12h07

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