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 averti
    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
    Points : 417
    Points
    417
    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 confirmé
    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
    Points : 562
    Points
    562
    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 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 635
    Points
    21 635
    Par défaut
    Ça marche aussi avec Long.decode(), si on veut pas virer le 0x du début.

  4. #4
    Expert éminent sénior
    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 : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    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 confirmé
    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
    Points : 562
    Points
    562
    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 sénior
    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 : 45
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    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 averti
    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
    Points : 417
    Points
    417
    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