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

Langage Java Discussion :

Conversion String vers Byte


Sujet :

Langage Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 11
    Points : 4
    Points
    4
    Par défaut Conversion String vers Byte
    Bonjour,
    J'ai un petit problème, le voici :
    J'ai un string de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String b="\\0xFF\\0xD8\\0xFF\\0xDB";
    et je voudrai le convertir en un tableau de byte de la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    byte[] tab = new byte[] {(byte) 0xFF, (byte)0xD8,(byte) 0xFF, (byte)0xE0};
    Il faut donc utiliser la méthode split sur ma string :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String[] str=b.split("\\\\");
    Mais après, je ne trouve pas convertir mes éléments string du tableau en byte.

    J'essaye depuis une heure, mais je sèche. Avez vous la solution?

    Merci

  2. #2
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Le String.split va renvoyer les byte sous la forme de String. Pour les convertir en byte, il faut faire une boucle qui, pour chaque element, va faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    byte elt = Byte.parseByte(str[i]);
    Au passsage, pour que le split fonctionne dans ton cas, il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String[] str=b.split("\\");
    a+

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Merci de ta réponse, mais j'ai déjà essaye, sa ne fonctionne pas.
    Lors de l'execution du code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    byte elt = Byte.parseByte("0xFF");
    Il y a une erreur :

    Exception in thread "main" java.lang.NumberFormatException: For input string: "0xFF"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Byte.parseByte(Unknown Source)
    at java.lang.Byte.parseByte(Unknown Source)
    at test.main(test.java:13)

  4. #4
    Membre actif Avatar de Mamypirate
    Homme Profil pro
    Samouraï
    Inscrit en
    Mai 2011
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Samouraï
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2011
    Messages : 108
    Points : 211
    Points
    211
    Par défaut
    Tu peux essayer avec :

    Byte.decode(aString)
    Byte.valueOf(aString)
    Byte.valueOf(aString, radix)

    Attention ces méthodes retournes un objet Byte et non le type primitif. Mais la conversion est ensuite possible.

    Au passage, un byte c'est pas entre -128 et 127 ? Tu seras pas hors cadre ?

  5. #5
    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
    Vous devez préciser la base et supprimer le 0X. Par défaut c'est la base 10.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    byte elt = Byte.parseByte("FF",16);

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Vous devez préciser la base et supprimer le 0X. Par défaut c'est la base 10.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    byte elt = Byte.parseByte("FF",16);
    Avec ceci j'obtiens une erreur out of range :
    Exception in thread "main" java.lang.NumberFormatException: Value out of range. Value:"FF" Radix:16
    Je vais essayer ta solution Mamypirate. Hors cadre? Je ne sais pas, les bytes que j'ai donné en exemple sont les premiers bytes d'un fichier JPG

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2011
    Messages : 214
    Points : 338
    Points
    338
    Par défaut
    Citation Envoyé par nonos58 Voir le message
    Avec ceci j'obtiens une erreur out of range
    C'est normal le type "byte" est signé comme tous les types numériques primitifs en Java.
    Les valeurs sont comprises entre -128 et 127 inclus et FF en hexa correspond à 255 en décimal donc on est bien "out of range".

  8. #8
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 565
    Points : 21 630
    Points
    21 630
    Par défaut
    Oui, personnellement j'ai essayé tout ça et j'en ai eu marre.

    Soit j'utilise commons-codec, soit j'écris mon propre parseur de bytes non signés en hexadécimal.

    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
    public static int parseHexDigit(char ch) {
      if(ch >= '0' || ch <= '9') {
        return ch - '0';
      } else if(ch >= 'a' || ch <= 'f') {
        return 10 + ch - 'a';
      } else if(ch >= 'A' || ch <= 'F') {
        return 10 + ch - 'A';
      } else {
        throw new IllegalArgumentException("bad hex digit: " + ch);
      }
    }
     
    public static byte parseHexByte(String s) {
      if(s.length() != 2) {
        throw new IllegalArgumentException("String cannot be hexadecimal byte: " + s);
      }
      return (byte)(parseHexDigit(s.charAt(0))*16 + parseHexDigit(s.charAt(1)));
    }
    C'est malheureux que tout le monde doive faire ça ou inclure une bibliothèque pour, mais ça prend pas des heures non plus.

    Edit : à noter qu'on peut aussi bricoler à coup de Integer.parseInt(n, 16) et caster ensuite en byte. Mais dans ce cas il faut s'assurer qu'il y a bien 2 chiffres et qu'il n'y a pas de signe plus, de signe moins, en fait que c'est deux chiffres hexadécimaux et rien d'autre.
    À ce niveau-là, je préfère encore le programmer moi-même, c'est plus clair.

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 11
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Oui, personnellement j'ai essayé tout ça et j'en ai eu marre.

    Soit j'utilise commons-codec, soit j'écris mon propre parseur de bytes non signés en hexadécimal.

    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
    public static int parseHexDigit(char ch) {
      if(ch >= '0' || ch <= '9') {
        return ch - '0';
      } else if(ch >= 'a' || ch <= 'f') {
        return 10 + ch - 'a';
      } else if(ch >= 'A' || ch <= 'F') {
        return 10 + ch - 'A';
      } else {
        throw new IllegalArgumentException("bad hex digit: " + ch);
      }
    }
     
    public static byte parseHexByte(String s) {
      if(s.length() != 2) {
        throw new IllegalArgumentException("String cannot be hexadecimal byte: " + s);
      }
      return (byte)(parseHexDigit(s.charAt(0))*16 + parseHexDigit(s.charAt(1)));
    }
    C'est malheureux que tout le monde doive faire ça ou inclure une bibliothèque pour, mais ça prend pas des heures non plus.

    Edit : à noter qu'on peut aussi bricoler à coup de Integer.parseInt(n, 16) et caster ensuite en byte. Mais dans ce cas il faut s'assurer qu'il y a bien 2 chiffres et qu'il n'y a pas de signe plus, de signe moins, en fait que c'est deux chiffres hexadécimaux et rien d'autre.
    À ce niveau-là, je préfère encore le programmer moi-même, c'est plus clair.
    Merci beaucoup, sa fonctionne bien comme cela !!!

Discussions similaires

  1. String vers byte[]
    Par EpOnYmE187 dans le forum Langage
    Réponses: 8
    Dernier message: 28/10/2011, 11h23
  2. Conversion String vers char
    Par benwit dans le forum Langage
    Réponses: 27
    Dernier message: 30/03/2007, 14h01
  3. conversion string vers une date
    Par fatati dans le forum C++Builder
    Réponses: 7
    Dernier message: 14/12/2006, 10h09
  4. Conversion String vers Byte
    Par zulianithomas dans le forum Delphi
    Réponses: 8
    Dernier message: 07/10/2006, 10h09
  5. conversion string vers int
    Par mathher dans le forum C++
    Réponses: 4
    Dernier message: 14/04/2006, 17h52

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