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 ME Discussion :

Problème de parse de String vers Byte


Sujet :

Java ME

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 26
    Points : 10
    Points
    10
    Par défaut Problème de parse de String vers Byte
    J'ai une fonction int2stringBin() qui me transforme un int en String codée en binaire.
    Je lui passe en paramètre la valeur de l'int et la longueur de la String à générer.
    Ensuite, je parse cette String en Byte pour pouvoir mettre le tout dans un OutputStream d'un socket TCP.

    Voici la partie du code qui foire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    myString16 = DNSQuery.int2stringBin(id,16);
    System.out.println (myString16);
    mySubString = myString16.substring(0,8);
    System.out.println(mySubString);
    queryFrameByte[1]= Byte.parseByte(mySubString, 2);
    mySubString = myString16.substring (8,16);
    System.out.println(mySubString);
    queryFrameByte[2]= Byte.parseByte(mySubString, 2);
    System.out.println(queryFrameByte[1]);
    System.out.println(queryFrameByte[2]);
    Je met 0 à 8 comme indice sur la String car la création de la substring a besoin de l'indice juste apres la dernière valeur.

    J'obtiens dans la console :

    1111111111111111
    11111111
    java.lang.NumberFormatException
    at java.lang.Byte.parseByte(Byte.java:153)
    at browser.DNSQuery.QueryBuilder(DNSQuery.java:101)
    at browser.DNSQuery.DomainNameQuery(DNSQuery.java:181)
    at browser.SocketManager.run (SocketManager.java:60)

    Il y a donc un problème au niveau du parsage. Mais je ne vois vraiment pas où c'est vu que juste avant, je vois que j'ai bien 8bit et donc un octet (Byte).

    Merci d'avance pour votre aide.

  2. #2
    Membre expérimenté Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Points : 1 639
    Points
    1 639
    Par défaut
    Je pense que la methode parseByte a comme parametre un byte signé, c'est a dir compris entre -127 et 127.
    Or 11111111 est egal a 255.

    Jette un oeil ici :
    http://www.scadasec.net/secwiki/JavaTricks

    et sur l'api :
    http://java.sun.com/j2se/1.4.2/docs/....String,%20int)

    c'est precise :
    Parses the string argument as a signed byte in the radix specified by the second argument.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    Je sais que parsebyte transforme ma String en Byte signe.
    L'erreur que j'qi ici est : java.lang.NumberFormatException.
    Et dans l'API de J2ME, cette erreur correspond a :
    NumberFormatException - If the String does not contain a parsable byte.

    Or, ici, 11111111, correspond a -1 en Byte signe et a 255 sinon, donc en theorie, c'est parsable, non ?

    A mon avis, c'est plus un probleme de caractere special de fin de String qui fout la merde.

  4. #4
    Membre expérimenté Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Points : 1 639
    Points
    1 639
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Parses the string argument as a signed byte in the radix specified by the second argument.
    Si tu lis dans la bonne methode avec les deux arguments, tu verras ceci:

    An exception of type NumberFormatException is thrown if any of the following situations occurs:

    * The first argument is null or is a string of length zero.
    * The radix is either smaller than Character.MIN_RADIX or larger than Character.MAX_RADIX.
    * Any character of the string is not a digit of the specified radix, except that the first character may be a minus sign '-' ('\u002D') provided that the string is longer than length 1.
    * The value represented by the string is not a value of type byte.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 26
    Points : 10
    Points
    10
    Par défaut
    Bah oui, mais justement, je vois aucun des cas d'erreurs comme etant possible ici : ma String est pas nulle (elle s'affiche), le radix est bon (2), et les caracteres a l'interieur sont des 0 ou des 1, donc, ils sont valides.
    Quant a "* The value represented by the string is not a value of type byte.", c'est pas le cas vu que j'affiche la string et qu'elle a pile 8 caracteres.
    A mon avis, c'est comme ce que je disais auparavant, il doit y avoir un caractere qui doit se balader a la fin ou au debut et qui fout tout en l'air.

    Bon, la, je viens tester une technique : je parse la string en int et je cast l'int en byte.
    Apparement ca marche pas trop mal, mais est-ce que tu sais si j'aurais bien le bon code en binaire non signe a l'interieur du byte (meme si au moment de l'extraire, il faudra que je bidouille) ?

  6. #6
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    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
    public class ParseByte {
     
    	public static void main(String... args) {
    		byte b = -1;
    		String stringRepresentation = Integer.toBinaryString(b & 0xff);
    		System.out.println(stringRepresentation); // 11111111
     
    		// Lève NumberFormatException
    		// System.out.println(Byte.parseByte(stringRepresentation, 2));
     
    		System.out.println(Byte.parseByte("-00000001", 2)); // -1
     
    		byte parsed = (byte) Integer.parseInt(stringRepresentation, 2);
    		System.out.println(parsed); // -1
    	}
     
    }
    Les réponses à tes questions sont dans ce code

Discussions similaires

  1. String vers byte
    Par hetlar dans le forum Langage
    Réponses: 2
    Dernier message: 24/08/2013, 14h14
  2. String vers byte[]
    Par EpOnYmE187 dans le forum Langage
    Réponses: 8
    Dernier message: 28/10/2011, 11h23
  3. Conversion String vers Byte
    Par nonos58 dans le forum Langage
    Réponses: 8
    Dernier message: 10/05/2011, 15h55
  4. Réponses: 3
    Dernier message: 25/05/2009, 14h36
  5. Conversion String vers Byte
    Par zulianithomas dans le forum Delphi
    Réponses: 8
    Dernier message: 07/10/2006, 10h09

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