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

API standards et tierces Java Discussion :

D�clarer un String comme �tant de l'h�xad�cimal


Sujet :

API standards et tierces Java

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �clair�
    Inscrit en
    Mai 2005
    Messages
    364
    D�tails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 364
    Par d�faut D�clarer un String comme �tant de l'h�xad�cimal
    Slt � tous,

    J'ai une m�thode dans laquelle je re�ois un String qui se trouve �tre de l'h�xad�cimal.

    Il se trouve, que comme je veux r�cup�rer un tableau de bytes, je veux d�clarer mon objet comme �tant de l'h�xa et non un simple string...

    Je ne veux donc pas le convertir (�a, je sais faire ^^) mais le caster...

    Je vous remercie

  2. #2
    Mod�rateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par d�faut
    �a veut rien dire. Une String est une String. C'est une s�quence de caract�res et ce n'est pas autre chose.

    Une String ne se caste pas. C'est donc, probablement, bien une conversion que tu veux faire.

    Mais pour qu'on se fasse une id�e, c'est comme toujours : 'faudrait voir du code.
    Cas o� il n'est pas n�cessaire de montrer un peu de concret pour exposer un probl�me : aucun. �a n'existe pas.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre �clair�
    Inscrit en
    Mai 2005
    Messages
    364
    D�tails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 364
    Par d�faut
    Je comprend bien ce que tu veux dire
    Mais mon string qui entre dans ma m�thode, est bien de l'h�xa.

    J'ai ainsi par ex EF010 qui arrive en tant que String.
    Seulement ce EF010 est de h�xa, cad 978 960 en v�ritable string.

    Mon but est de r�cup�rer les bytes de �a. Si je le prend tel quel en String ce n'est pas bon (forc�ment...), si je le convertit en h�xa idem...

    C'est pour �a, que je dois d�clarer ma chaine en tant que h�xa, sans la convertir...

    Cdlt,

  4. #4
    Mod�rateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par d�faut
    Je ne vois pas le probl�me � le prendre tel quel en String.

    Le plus simple est d'utiliser la biblioth�que commons-codecs :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    String s = "EF0100";
    byte[] bytes = Hex.decodeHex(s.toCharArray());
    System.out.println(Arrays.toString(bytes));
    Bien s�r, vu qu'un octet est sur deux chiffres hexad�cimaux, il faut un nombre pair de chiffres. Ton exemple impair, �a ne va pas aller.

    Si on veut �viter une bibli externe, il suffit d'�crire sa propre m�thode de conversion :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    public class Hex {
     
      public static int getDigitValue(char ch) {
        if(ch >= '0' && ch <= '9') {
          return ch - '0';
        } else if(ch >= 'a' && ch <= 'f') {
          return ch - 'a' + 10;
        } else if(ch >= 'A' && ch <= 'F') {
          return ch - 'A' + 10;
        } else {
          throw new IllegalArgumentException("Illegal hexadecimal digit: " + ch);
        }
      }
     
      public static byte[] decode(String s) {
        int sLen = s.length();
        if(sLen % 2 != 0) {
          throw new IllegalArgumentException("Odd number of characters: " +*s);
        }
        byte[] bytes = new byte[sLen / 2];
        for(int i = 0; i < bytes.length; i++) {
          int thisByte = getDigitValue(s.charAt(2*i))*16 + getDigitValue(s.charAt(2*i + 1));
          bytes[i] = (byte)thisByte;
        }
        return bytes;
      }
     
      public static void main(String[] args) {
        String s = "EF0100";
        byte[] bytes = Hex.decode(s);
        System.out.println(Arrays.toString(bytes));
      }
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    R�dacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    F�vrier 2004
    Messages
    1 259
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France

    Informations professionnelles :
    Activit� : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : F�vrier 2004
    Messages : 1 259
    Par d�faut
    Citation Envoy� par thelvin Voir le message
    Si on veut �viter une bibli externe, il suffit d'�crire sa propre m�thode de conversion :
    ...
    Et Integer.parseInt(taString, 16) .. c'est pas bien pour parser de l'hexa ?

    Ensuite pour en revenir au probl�me .. �a veut dire quoi "je veux d�clarer mon objet comme �tant de l'h�xa"

    Un type h�xa �a n'existe pas en java, c'est au mieux un tableau de byte.

    Caster signifie changer le type de l'objet et non pas le convertir or m�me dans un langage comme le C permettant ce genre de cast violent, la valeur lue dans le tableau de byte ne correspondra pas � la valeur hexa repr�sent�e dans la string. Ce sera juste un tableau contenant les code ASCII des caract�res utilis�s pour repr�sent� la chaine h�xa... et �a n'a rien � voir du tout.

    Il va donc falloir passer par une conversion et non un cast.

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  6. #6
    Mod�rateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par d�faut
    Citation Envoy� par bulbo Voir le message
    Et Integer.parseInt(taString, 16) .. c'est pas bien pour parser de l'hexa ?
    Pour faire un byte[] ? Moi je suis pas fan.
    Si l'int est sup�rieur � 0x7fff ffff, on fait comment ? Et sup�rieur � 0x7fff ffff ffff ffff ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    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 bobic Voir le message
    Mais mon string qui entre dans ma m�thode, est bien de l'h�xa.
    Une String c'est un String, c'est � dire un objet qui encapsule un tableau de char[], de l'hexad�cimal, comme du d�cimal, ce n'est jamais qu'une conversion d'un nombre binaire en un ensemble de valeur en m�moire qui correspondent � la table de charact�res utilis�e par le language

    J'ai ainsi par ex EF010 qui arrive en tant que String.
    Seulement ce EF010 est de h�xa, cad 978 960 en v�ritable string.
    Je vois pas ce que tu appelle un v�ritable String. CF. mon point ci-dessus
    si je le convertit en h�xa idem...
    Je vois pas du tout ce que tu appelle "convertir en hexa". Quand � "d�clarer un chaine en tant que hexa", �a ne veux rien dire en termes de programmation. Si t'as une chaine de charact�res (String) qui repr�sente un nombre, peu importe sa base, tu va devoir la convertir en byte/int/long/float/double suivant sa signification pour pouvoir faire des calculs dessus.

Discussions similaires

  1. R�ponses: 4
    Dernier message: 10/10/2010, 23h06
  2. d�clarer une classe comme �tant une classe fille
    Par dancingmad dans le forum Langage
    R�ponses: 9
    Dernier message: 30/07/2009, 09h44
  3. [C#] installation comme �tant service windows
    Par fafa139 dans le forum Windows Forms
    R�ponses: 5
    Dernier message: 04/04/2006, 10h41
  4. String comme tableau de caracteres
    Par malek_dz77 dans le forum VB 6 et ant�rieur
    R�ponses: 6
    Dernier message: 10/12/2005, 19h11
  5. R�ponses: 9
    Dernier message: 30/11/2005, 18h18

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