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 int en hexa


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Par défaut Convertir int en hexa
    Bonjour,

    J'ai un nombre (int) compris entre 0 et 16 777 215 (0xFFFFFF).

    Je voudrais le convertir en chaine de caractère hexa fixe (6 caractères) en inversant les octets.

    Ex : 12346 (= 0x303A)
    => "00303A" (transformation en string sous forme hexa)
    => resultat : "3A3000" (inversion des octets)

    Comment feriez-vous ?

    voici mon coade actuel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    	private static String convInt(Integer val){
    		String valStr, valStr2 = new String();
     
    		if ((0 <= val) && (val <= 0xFFFFFF)){
    			valStr = Integer.toHexString(val);
     
    			for (char i=0; i <= (6 - valStr.length()); i++){
    				valStr = "0" + valStr;
    			}
     
    			for (char i=0; i < 3; i++){
    				valStr2 += valStr.substring(6-(i*2)-2, 6-(i*2));
    			}
    		} else {
    			valStr2 = "------";				
    		}
     
    		System.out.println(valStr2);
    		return valStr2;
    	}

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,



    Pour la conversion en hexa tu as 2 solutions :
    • Integer.toHexString() qui ne permet pas de fixer une longueur, ni de choisir entre minuscule ou majuscule
    • String.format() qui permet nettement plus de chose (mais peut-être un peut plus couteux).

    Avec ce dernier cela pourrait donner ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	int value = 12346;
     
    	// => "00303A" (transformation en string sous forme hexa)
    	String hexa = String.format("%06X", value);
     
    	// => resultat : "3A3000" (inversion des octets) 
    	hexa = new StringBuilder(hexa).reverse().toString();
    On pourrait l'optimiser comme ceci (String.format() crée en fait un StringBuilder lui aussi) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	StringBuilder sb = new StringBuilder(6);
    	// => "00303A" (transformation en string sous forme hexa)
    	new Formatter(sb).format("%06X", value);
    	// => resultat : "3A3000" (inversion des octets) 
    	String hexa = sb.reverse().toString();
    A noter qu'en cas d'utilisation massive il faudrait peut-être étudier les perfs avec Integer.toHexString()...

    a++

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Par défaut
    ok merci,

    La première solution me convient
    Par contre si je converti avec Integer.toHexString(), comment fais-tu pour que la chaine fasse 6 caractères (je ne pense pas que ma solution soit la plus judicieuse) ?

    Aussi il y a un problème le reverse => je ne veux pas inverser chaque caractère mais chaque valeur d'octet (ma solution focntionne mais je ne pense pas qu'elle soit très élégante).
    => ta méthode affiche "A30300" alors que je voudrais "3A3000"

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    Y'a surement mieux mais bon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int ChaineLength = 6;
    String str = Integer.toHexString(12346);
    String strinv = "";
     
    for (int i = str.length(); i < ChaineLength; i++)
    str="0"+str;
     
    for (int i = 0; i < ChaineLength; i+=2)
    strinv = str.substring(i, i+2)+strinv;
     
    System.err.println("normal 0x"+str);
    System.err.println("invers 0x"+strinv);
    ou bien autrement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    byte b1 = (byte) ((valeur & 0xFF000000)>>0x24);
    byte b2 = (byte) ((valeur & 0x00FF0000)>>0x16);
    byte b3 = (byte) ((valeur & 0x0000FF00)>>0x8);
    byte b4 = (byte)  (valeur & 0x000000FF);
     
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    PrintStream pseam = new PrintStream(out);
    pseam.printf("0x%02x%02x%02x\r\n", b4,b3,b2);
    System.err.println(""+out.toString());
    ce qui donne :

    normal 0x00303a
    invers 0x3a3000
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Par défaut
    ok merci beaucoup

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

Discussions similaires

  1. int en hexa
    Par anthonycosson dans le forum C++
    Réponses: 18
    Dernier message: 13/05/2006, 16h09
  2. Convertir int en chaîne de caractère
    Par be_tnt dans le forum Réseau
    Réponses: 44
    Dernier message: 25/04/2006, 15h35
  3. [C#] convertir un nombre hexa en int
    Par linux dans le forum C#
    Réponses: 5
    Dernier message: 08/12/2005, 16h38
  4. [Conversion]convertir int[] en bytes[]
    Par tony_big_guy dans le forum Langage
    Réponses: 5
    Dernier message: 02/05/2005, 15h47
  5. [débutant] conversion int en hexa
    Par sergoid dans le forum C++Builder
    Réponses: 6
    Dernier message: 16/05/2003, 11h11

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