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 byte en int et vis versa


Sujet :

Langage Java

  1. #1
    Membre chevronné Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 232
    Points : 1 897
    Points
    1 897
    Par défaut Conversion byte en int et vis versa
    UDP et InetAdress travaillant avec une IP sous forme d'un tableau de byte[] comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    InetAddress address = InetAddress.getByAddress({(byte)192, (byte)168, (byte)0, (byte)2});
    DatagramPacket packet = new DatagramPacket(out, out.length, address, 33333);
    Enfin je dois convertir cette adresse en une String de la forme :
    ... pour écriture dans un fichier.


    Et bien le code ci-après :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     String strIp = "";
     
    for (int i = 0; i < ip.length; i++)
    {
        strIp += String.valueOf(ip[i]) + ".";
        System.out.print("IP => " + strIp);
    }
     
    getTableInit().put(CLE_IP_UDP, strIp.substring(0, strIp.length() - 1));
    ... écrit dans le fichier la valeur suivante :

    Cela semble normal puisque un byte couvre la plage -128 à 127.

    Alors comment faire pour convertir un byte > 127 en un int > 127, et vis versa ?

    Merci d'avance.
    La connaissance ne sert que si elle est partagée.
    http://ms2i.net

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Le "problème" vient du fait que les bytes ne couvrent que les valeurs allant de -128 à 127, et donc lors de la conversion de int vers byte on a une perte de précision... et il n'existe pas de byte "unsigned"...


    Si on veut simuler cela, il faut traiter la valeur après conversion en int afin de corriger les valeurs en dessous de zéro. Je vois deux solutions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    byte b = ...;
     
    // En ajoutant 256 lorsque b est négatif :
    int n = b<0 ? 256+b : b;
     
    // En ajoutant 256 dans tous les cas, avec un modulo pour corriger la valeur
    int m = (256+b)%256;

    a++

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 155
    Points : 199
    Points
    199
    Par défaut
    int monint=( (monbyte) & 0x000000FF );

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par merill Voir le message
    int monint=( (monbyte) & 0x000000FF );
    En effet je pense jamais à jouer avec les opérateurs unaires


    a++

  5. #5
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 562
    Points : 15 493
    Points
    15 493
    Par défaut
    Pourquoi toute ces parenthèses?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int monint= monbyte & 0x000000FF;
    c'est suffisant non?

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 155
    Points : 199
    Points
    199
    Par défaut
    tout à fait
    c'est juste, pour l'hstoire que je reprenais cela de mon code qui avait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    i1 = ( ((byte) stringBuffer.charAt(1)) & 0x000000FF) + 1;
    Des fois, je met des parenthèses en plus histoire de comprendre facilement le sens de l'execution.

  7. #7
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 562
    Points : 15 493
    Points
    15 493
    Par défaut
    C'est sans doute pour rendre la lecture plus facile, mais dans ton cas les parenthèses sont quand même inutiles à par pour le (byte) Personellement je préfère eviter les parentheses en trop, je trouve pas plus clair.

    Par contre dans ( (monbyte) & 0x000000FF ) ça deviens carrément trompeur. Au premier coup d'oeil on à l'impression que l'on fait un cast en monbyte.

  8. #8
    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
    Citation Envoyé par Uther Voir le message
    Pourquoi toute ces parenthèses?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int monint= monbyte & 0x000000FF;
    c'est suffisant non?
    Pourquoi tous ces 0?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int monint = monbyte & 0xff;

  9. #9
    Membre chevronné Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 232
    Points : 1 897
    Points
    1 897
    Par défaut
    Et bien merci à tous pour vos réponses.

    A+
    La connaissance ne sert que si elle est partagée.
    http://ms2i.net

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

Discussions similaires

  1. Transformer des bytes en String et vis versa
    Par sebac dans le forum Langage
    Réponses: 2
    Dernier message: 16/09/2009, 14h47
  2. conversion Byte[] vers int
    Par skud dans le forum C#
    Réponses: 5
    Dernier message: 17/05/2007, 12h14
  3. conversion flottant en binaire et vis versa
    Par sandball22 dans le forum C
    Réponses: 43
    Dernier message: 20/03/2007, 18h43
  4. Conversion anglais-francais et vis-versa
    Par lazzeroni dans le forum BIRT
    Réponses: 43
    Dernier message: 04/04/2006, 17h13

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