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 :

Conversion hexadécimal Integer


Sujet :

Java

  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 442
    Par défaut Conversion hexadécimal Integer
    Bonjour à tous,

    Je rencontre un problème tout bête, pas vraiment dramatique, mais qui me laisse quand même perplexe :

    Vous connaissez tous la classe "Color". Vous savez peut-être qu'elle contient un constructeur acceptant un hexadécimal rgba : Color(int rgba, boolean hasalpha)

    Mon problème, c'est que mon entier est dans un String, et que toutes les méthodes de conversion que je connais ne dépassent pas 0x7FFFFFFF...

    Comment je peux m'en sortir ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String s = "0xffff00ff";
    Color c = new Color(Integer.decode(s),true);//NumberFormatException

  2. #2
    Membre chevronné
    Homme Profil pro
    Ed Nat
    Inscrit en
    Janvier 2013
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ed Nat
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 325
    Par défaut
    Bonjour,
    Dans un sens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    String s = "ffff00ff";
    int intValue = (int) Long.parseLong(s, 16);
    Color c = new Color(intValue ,true);
    Et dans l'autre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Color color = new Color(0, 255, 0);
    String rgb = Integer.toHexString(color.getRGB());

  3. #3
    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
    Ça marche aussi avec Long.decode(), si on veut pas virer le 0x du début.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par kox2ee Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Color color = new Color(0, 255, 0);
    String rgb = Integer.toHexString(color.getRGB());
    Faudrais utiliser long là aussi et, en plus, virer le signe de bit, sinon, pour la valeur FFFFFFFF, ça va retourner "-0x1"

  5. #5
    Membre chevronné
    Homme Profil pro
    Ed Nat
    Inscrit en
    Janvier 2013
    Messages
    325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Ed Nat
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2013
    Messages : 325
    Par défaut
    Bonjour,
    Citation Envoyé par thelvin Voir le message
    Ça marche aussi avec Long.decode(), si on veut pas virer le 0x du début.
    oui, avec intValue() à la fin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    String s = "0xffff00ff";
    int intValue = Long.decode(s).intValue();
    Color c = new Color(intValue ,true);
    Citation Envoyé par tchize_ Voir le message
    Faudrais utiliser long là aussi et, en plus, virer le signe de bit, sinon, pour la valeur FFFFFFFF, ça va retourner "-0x1"
    Ben pourquoi ?
    Integer.toHexString(c.getRGB()) va bien retourner la valeur attendue
    FFFFFFFF pour FFFFFFFF
    La valeur décimale du RGB en java est bien un int, pas un long ?
    16777215 pour FFFFFFFF est un int

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Au temps pour moi, j'avais oublié que toHexString, tout comme le String format avec %X, travaillait en non signé. Parce que 0xFFFFFFFF en int, c'est la valeur -1 en signé

  7. #7
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    442
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 442
    Par défaut
    Ok! Merci à tous, vos réponse dépassent de loin mes espérances.

    Effectivement, j'avais essayé avec Long, mais buté bêtement sur le fait que j'avais oublié le .intValue() à la fin.

    J'ai aussi trouvé sur un autre forum la solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new BigInteger(s,16)).intValue()
    Dans mon cas, effectivement, je peux me débrouiller pour supprimer le "0x". Je pense donc que la solution la plus noble reste :

    Merci à tous pour votre aide !

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

Discussions similaires

  1. Conversion Hexadécimal en Décimal
    Par fveysseire dans le forum C
    Réponses: 2
    Dernier message: 31/08/2006, 11h03
  2. Conversion hexadécimal en ascii
    Par andrianiaina dans le forum C
    Réponses: 12
    Dernier message: 08/08/2006, 07h21
  3. Conversion CHAR -> INTEGER
    Par randimby dans le forum DB2
    Réponses: 1
    Dernier message: 06/07/2006, 09h36
  4. Conversion en integer
    Par krfa1 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 15/11/2005, 11h33
  5. Conversion hexadécimal -> décimal
    Par botanica dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 06/10/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