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 :

[String] Conversion vers entier


Sujet :

API standards et tierces Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 35
    Points : 28
    Points
    28
    Par défaut [String] Conversion vers entier
    Voici mon problème :

    Je dispose d'une String contenant une chaîne de caractère contenant 16 bits, par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String test =("1010100101010010");
    test est un nombre en complement a 2 signé sur 16 bits.

    Je voudrais extraire cette valeur vers un short j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    short resultat;
    resultat = Short.parseShort(test, 2);
    System.out.println("resultat :" + resultat);
    mais cette méthode ne marche pas , je me prends des dépassements de capacité (essayez avec 1011011110000101 comme valeur de test et vous comprendrez)

    comment je peux faire pour que ça marche ? c'est le type short qui ne convient pas, il faut faire une fonction realisant la conversion ?

    merci

  2. #2
    Membre actif
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Points : 265
    Points
    265
    Par défaut
    Bin c'est normal qu'il y est un depassement :

    1010100101010010 -> 43346 en decimal
    et la valeur max d'un Short est de 32767 -> 111111111111111

  3. #3
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Par contre fais attention, je ne suis pas sur que le parsing (avec un int ou un long ou un BigIntger) tienne compte du complement a 2. Essaie de parser le code de 0 pour etre sur. Tu vas peut etre devoir faire quelques corrections.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 35
    Points : 28
    Points
    28
    Par défaut
    Bin c'est normal qu'il y est un depassement :

    1010100101010010 -> 43346 en decimal
    et la valeur max d'un Short est de 32767 -> 111111111111111
    heu alors elle vient d'ou mon erreur ?

    1010100101010010 doit bien correspondre à une valeur non ?

    si je mets 0111111111111111 dans la valeur de test j'obtiens bien 32767 mais si je mets 1111111111111111 je plante.

    cela vient du fait que le codage soit en complement a 2 signé qui n'est pas le codage utilisé pour un short : donc la conversion plante ?
    peut etre qu'il faut faire une fonction pour realiser la conversion mais je nage...

  5. #5
    Nouveau membre du Club
    Inscrit en
    Novembre 2003
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 26
    Points : 29
    Points
    29
    Par défaut
    passe au type superieur a "short" ...."int" ...tu n'aura plus ce probleme.

  6. #6
    Membre actif
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Points : 265
    Points
    265
    Par défaut
    Citation Envoyé par Javatator
    Bin c'est normal qu'il y est un depassement :

    1010100101010010 -> 43346 en decimal
    et la valeur max d'un Short est de 32767 -> 111111111111111
    heu alors elle vient d'ou mon erreur ?

    1010100101010010 doit bien correspondre à une valeur non ?

    si je mets 0111111111111111 dans la valeur de test j'obtiens bien 32767 mais si je mets 1111111111111111 je plante.

    cela vient du fait que le codage soit en complement a 2 signé qui n'est pas le codage utilisé pour un short : donc la conversion plante ?
    peut etre qu'il faut faire une fonction pour realiser la conversion mais je nage...
    Ya un 1 de trop

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 35
    Points : 28
    Points
    28
    Par défaut
    Je ne peux pas remplacer mes short par des int Little_Goldo.

    Je ne comprends tjrs pas narfiggo, mon nombre est codé sur 16 bits donc je dois bien avoir une suite 16 nombre binaire ?

    pkoi si je mets 1111111111111111 (soit 16 un à la suite) tu me dis que c'est pas bon).

    Je comprends vraiment pas ça fais des heures que je galère sur cette conversion mais je n'y arrive toujours pas.

    Est ce que ma fonction de depart est bonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    short resultat; 
    resultat = Short.parseShort(test, 2); 
    System.out.println("resultat :" + resultat);
    ou est ce que je suis a coté de la plaque ?

    merci

  8. #8
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Tu n'es pas du tout a cote de la plaque, mais la fonction parse ne tient pas compte du signe, ni du complement a 2.
    Il faut donc que tu fasse une conversion avant, genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	public static short parse (String s) {
    	    boolean negatif = (s.charAt(0) == '1');
    	    short nb = Short.parseShort(new String("0" + s.substring(1, s.length())), 2);
    	    if(negatif) nb = (short) -nb;
    	    return nb;
    	}
    Attention, ca ne corrige que le signe ... (j'me souviens plus des normes )

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 35
    Points : 28
    Points
    28
    Par défaut
    Merci xavlours j'arrive au moins a detecter le signe de mon nombre..., mais apres je plante.

    J'arrive pas à faire cette *!!## conversion je comprends pas l'algo à appliquer apres je pense.

    help please

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 35
    Points : 28
    Points
    28
    Par défaut
    Personne ne peux m'aider :-( ?

    Voila ou j'en suis c'est bon pour les positifs mais faux pour les negatif je n'arrive pas à faire le complement a 2 :

    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
    public static short parse(String s) {
        System.out.println("Valeur du nombre a convertir :" + s);
        System.out.println("Detection valeur premier bit pour signe :");
        boolean negatif = (s.charAt(0) == '1');
        short nb = Short.parseShort(new String("0" + s.substring(1, s.length())), 2);
        if (negatif) {
          System.out.println("Inversion des bits :");
          StringBuffer convertir = new StringBuffer();
          for (int a = 1; a <= 15; a++) {
            if (s.charAt(a) == '1') {
              convertir = convertir.append("0");
            }
            else {
              convertir = convertir.append("1");
            }
            System.out.println("Resultat de la conversion : " + convertir);
            //Je suis bloqué a cette etape ! je dois oter 1 a la valeur binaire de convertir
     
          }
     
          nb = (short) - nb;
        }
        else {
          System.out.println("Premier bit = 0 -> nombre positif");
          System.out.println("Valeur : " + nb);
        }
     
        return nb;
      }
    qqn vois ce que je pourrais faire ?

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 35
    Points : 28
    Points
    28
    Par défaut
    Voila j'y suis arrivé !

    Merci à tous ceux qui ont bien voulu m'aidé et voici le code de ma fonction de conversion pour ceux que ça interesse :

    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
      public static short parse(String s) {
        boolean negatif = (s.charAt(0) == '1');
        StringBuffer convertir = new StringBuffer();
        short nb = Short.parseShort(new String("0" + s.substring(1, s.length())), 2);
     
        if (negatif) {
          for (int a = 1; a <= 15; a++) {
            if (s.charAt(a) == '1') {
              convertir = convertir.append("0");
            }
            else {
              convertir = convertir.append("1");
            }
            nb = Short.parseShort(convertir.toString(), 2);
          }
          nb = (short) - nb; // mise en place du signe -
          nb = (short) (nb - 1); // complement a 2
        }
        System.out.println("Resultat final " + nb);
        return (nb);
      }

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

Discussions similaires

  1. Conversion float vers entier
    Par kromartien dans le forum C
    Réponses: 2
    Dernier message: 29/09/2007, 13h35
  2. [DOM] Conversion vers String
    Par jymmy dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 02/05/2007, 14h25
  3. conversion string vers entier
    Par k_boy dans le forum VC++ .NET
    Réponses: 4
    Dernier message: 11/04/2007, 13h33
  4. [C#] Conversion chaîne vers entier signé 8 bits
    Par SesechXP dans le forum Windows Forms
    Réponses: 2
    Dernier message: 25/09/2006, 14h29
  5. conversion chaîne vers entier
    Par pepper18 dans le forum C++
    Réponses: 2
    Dernier message: 31/03/2006, 16h36

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