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 :

int vers hexa


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 67
    Par défaut int vers hexa
    Bonjour,

    je dois convertir un nombre entier en 4 octets hexadecimaux , et le stocker dans un tableau de char.

    par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int valeur=189; // 00 00 00 BD en hexa
     
    	String test=String.format("%04X", valeur);
    je souhaiterai avoir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //tab[0] = 0x00;
    //tab[1] = 0x00;
    //tab[2] = 0x00;
    //resultat[3] = 0xBD;
    comment faire s ' il vous plait ?

    Merci bien

  2. #2
    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
    Ben tu splitte ton int en 4 et t'appelle 4 fois format:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int val = ....;
    String[] tab = new String[]{
    String.format("%01X", val&0XFF);
    String.format("%01X", (val&0XFF00)>>> 8 );
    String.format("%01X", (val&0XFF0000)>>> 16 );
    String.format("%01X", (val&0XFF000000)>>> 24 );
    }

  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
    Euh, d'après ce qu'il souhaite avoir, c'est juste une question de split son entier en 4 octets.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char[] tab = new char[] {
      (char)((val >> 24) & 0xFF),
      (char)((val >> 16) & 0xFF),
      (char)((val >> 8) & 0xFF),
      (char)(val & 0xFF)
    };
    Bien sûr, l'hexadécimal n'a rien à voir là-dedans (à part pour faire le masque sur 0xFF, qui pourrait tout aussi bien être 255 à la place).

    Bien sûr aussi, il vaut mieux a priori stocker ça dans un byte[] que dans un char[]. Voire se passer de faire ça, tout court.
    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
    ouais, sa question est pas claire en fait

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2010
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 67
    Par défaut
    Merci de votre aide et désolé de m ' être mal exprimé mais a vrai dire , je suis un peu confus moi aussi ( je débute sur tout ce qui est octet et binaire).

    Je n ' ai d ' ailleurs pas compris le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char[] tab = new char[] {
      (char)((val >> 24) & 0xFF),
      (char)((val >> 16) & 0xFF),
      (char)((val >> 8) & 0xFF),
      (char)(val & 0xFF)
    };
    que représente les "(val >> 24) & 0xFF) " ?
    Aussi quel est la différence entre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (String.format("%x", c).toUpperCase()
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println(Integer.toHexString(c).toUpperCase());
    dans ce code( j ' ai fait un tableau de byte comme me l ' a conseillé thelvin)
    car le IntegerTohexString me rajoute plein de FFF alors que le string.format me met ca bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    byte[] tab = new byte[] {
    			  (byte)((valeur >> 24) & 0xFF),
    			  (byte)((valeur >> 16) & 0xFF),
    			  (byte)((valeur >> 8) & 0xFF),
    			  (byte)(valeur & 0xFF)
    			};
     
    	for(byte c:tab)
    	{
    		//System.out.println(c);
    		System.out.println(String.format("%x", c).toUpperCase());
    		System.out.println(Integer.toHexString(c).toUpperCase());
    	}
    merci encore de votre aide

  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
    >> décalage signé de bits vers la droite, & effectue un masque de bits Donc

    ((val >> 24) & 0xFF)
    Va mettre en positions 0 - 7 les bits 24-31 (à cause du shift) et en position 8 - 31 des 0 (à cause du masque)


    Pour la différence:
    format va utiliser le type réel (byte) pour faire le formatage. L'affichage sera donc correct. Ainsi, le byte -107, qui s'écrite 0x95 sera correctement affiché.

    Integer.toHexString, comme on peux s'en douter, travaille exclusivement avec des int. Donc java va d'abord promouvoir -107 (byte) en -107 (int). On travaille en arithmétique signée et la valeur est préservée par la promotion, ce qui se fait, en complément à 2, par la propagation du bit de signe jusqu'à la position 31. En entier, donc, -107 c'est 0xFFFFFF95. Pour plus de détails, rechercher de la littérature sur l'arithmétique signée en informatique et le complément à 2

    edit: et pour t'en convaincre, regarde le résultat de ces lignes avec un nombre négatif

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    System.out.println(String.format("%x", c).toUpperCase());
    System.out.println(String.format("%x", (short)c).toUpperCase());
    System.out.println(String.format("%x", (int)c).toUpperCase());
    System.out.println(String.format("%x", (long)c).toUpperCase());

+ 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. Réponses: 2
    Dernier message: 24/03/2006, 10h46
  3. Problème de conversion decimal vers Hexa
    Par Elbarto dans le forum C++
    Réponses: 1
    Dernier message: 06/02/2006, 19h37
  4. [langage] conversion décimal vers hexa
    Par chipster dans le forum Langage
    Réponses: 2
    Dernier message: 23/02/2004, 16h05
  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