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 de byte en short


Sujet :

Langage Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 418
    Points : 67
    Points
    67
    Par défaut conversion de byte en short
    salut,

    j'ai un tableau de byte et j'aimerai convertir les valeurs en entier de la façon suivante ;
    - toute valeur negative doit se convertir en son complement ( > 128) , etant donné que les valeurs du byte varienet de -127 a 128 , j'aimerai que mes valeur soient entre 0 et 255 , donc je garde les valeurs positives telles qu'elles est et les valeurs negatives je les convertis en des valeurs superieuerss a 128 ..exemple la valeur - 10 devient 138

    merci

  2. #2
    Membre régulier Avatar de BoudBoulMan
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 100
    Points : 116
    Points
    116

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 418
    Points : 67
    Points
    67
    Par défaut
    mon type initial est byte et non pas Byte !!

  4. #4
    Membre régulier Avatar de BoudBoulMan
    Profil pro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 100
    Points : 116
    Points
    116
    Par défaut
    Citation Envoyé par Sun
    The Byte class wraps a value of primitive type byte in an object. An object of type Byte contains a single field whose type is byte.
    Ce genre de classe (wrapper) est utilisé pour permettre de faire des actions plus poussées sur les types primitifs. Il existe un wrapper pour chaque type primitif (int -> Integer, double -> Double, etc...)

    donc, pour ta conversion, la classe Byte offre la méthode shortValue().

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    byte maByte = 1;
    short monShort = (new Byte(maByte)).shortValue();
    (désolé du jeu de mot (vulgaire) avec ma byte et mon short )

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 194
    Points : 234
    Points
    234
    Par défaut
    Ce qui est certain, c'est que tu ne pourras pas "convertir" ton tableau de byte. Il faut donc que créé le tableau de short et que tu y écrive les valeurs corrigées. La partie intéressante est celle qui calcule le nombre positif :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    byte by = (byte)-10;
    short sh = (short)(~by + 1);
    C'est normalement ce code que tu devrais adopter car je crois me rappeler que c'est l'opération inverse qui est effectuée par la jvm lors d'un opération de sous-casting comme (byte)138.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 194
    Points : 234
    Points
    234
    Par défaut
    Mon code ne fais pas ce que je veux

    Je n'arrive pas à obtenir le résultat en base 2, alors voici une solution en base 10 (en considérant un byte noté by) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    short sh = (short)( by + (Byte.MAX_VALUE+1) * 2 );

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 418
    Points : 67
    Points
    67
    Par défaut
    tu peux m'expliquer ton code stp

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 194
    Points : 234
    Points
    234
    Par défaut
    Je suis parti du principe que tu veux représenter un nombre de 8 bits. Lorsqu'un tel nombre est casté dans un byte, il subit une troncature pour réserver un bit au signe +/-. En fait c'est un peu plus compliqué car Java effectue aussi une opération de complément ~, si je me souviens bien.

    Dans tous les cas, l'idée est que si un nombre de 8 bits est stocké dans un byte, il faut pouvoir le récupérer de façon cohérente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    toShort( (byte)255 ) == 255 //doit retourner true
    Je n'ai pas réussi à retrouver l'opération binaire pour ça alors j'ai fait du "reverse ingeniering" en observant de quelle façon évoluait le résultat d'un sous-casting en byte par rapport au nombre initial. Et la formule que je t'ai donné est celle qui résume l'observation que j'en ai fait. (Byte.MAX_VALUE+1) représente la valeur absolue de Byte.MIN_VALUE.

    A noter que ma formule ne marche que pour (by <= 0)

    [EDIT]

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 418
    Points : 67
    Points
    67
    Par défaut
    je profite pour poser une petite question ici :
    si l'on part d'une valeur decimale ( exemple 122) et que l'on desire la convertir en binaire sur 8 bits ...et que l'on veut que cette valeur soit devise en deux bloc de façon a extraire chaque 4 bits seul et les receonvertir en decimal : exemple
    122 -> 0111 1010 sur 8 bits ..ceci nous donnes 0111 comme premier bloc et 1010 comme deuxieme bloc ..donc les deux valeurs fianles seront : 7 et 10

    on fait comment ?

  10. #10
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 40
    Points : 35
    Points
    35
    Par défaut
    tu peux le faire en decalant les bits:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int monInt = 122;
    // on decale de 4 bit vers la droite
    System.out.println( "" + (monInt >> 4) );  //  0000 0111  = 7 
    // on fait un double decalage droite gauche qui ote les 4 dernier bits 
    // et on enleve ce qui reste au 122 de depart
    int monsecInt = 122 - (int) ((monInt >> 4 ) << 4) ; // 122 - [ 0111 0000 ]
    System.out.println( "" + monsecInt ); //  = 10
    bon apres ca reste des int a ce moment la.
    Y.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 418
    Points : 67
    Points
    67
    Par défaut
    et pour les valeurs negatives? j'ai essaye pour -16 ca donne -1 et 138 et c'est pas juste ? les decalages que tu as suggérés sont il bons?

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 418
    Points : 67
    Points
    67
    Par défaut
    je te rapelle qu' a la base je traite des valeurs de types byte ( ce qui explique des valeurs negatives entre -127 et 128 )
    merci

  13. #13
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 40
    Points : 35
    Points
    35
    Par défaut
    oui c est bon, mais uniquement pour des valeurs positives.
    pour les negatifs je ne sais pas comment faire.

    sinon pour tes negatifs ajoute -128 et tu devrais retomber juste il me semble

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 418
    Points : 67
    Points
    67
    Par défaut
    l'ajouter a quelel valeur j'ai pas saisi !

  15. #15
    Nouveau membre du Club
    Inscrit en
    Janvier 2006
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 40
    Points : 35
    Points
    35
    Par défaut
    pour un byte =-10 tu veux 138 exact ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    byte b = -10 ;
    if ( b< 0 )
     b = 128 + Math.abs(b)
    ensuite tu fait tes decallages
    Sinon j ai pas compris le pb

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 418
    Points : 67
    Points
    67
    Par défaut
    je vais opter pour ta derniere solution et je te tiendrai au courant
    merci

  17. #17
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    byte b=0x7A;
    byte mask=0x0F;
    byte b1=(byte)((b>>4)&mask);
    byte b2=(byte)(b&mask);
    System.out.println("b1 : "+b1+" b2 : "+b2);

  18. #18
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 194
    Points : 234
    Points
    234
    Par défaut
    Citation Envoyé par seriousme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    byte b=0x7A;
    byte mask=0x0F;
    byte b1=(byte)((b>>4)&mask);
    byte b2=(byte)(b&mask);
    System.out.println("b1 : "+b1+" b2 : "+b2);
    On s'en approche c'est bien une histoire de masque. En fait, d'après ce que je conclu de tout ça, c'est que le complément est effectué uniquement sur le bit de rang 8 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public static short toShort(byte by) {
    	return (short)(by & 255);
    }

Discussions similaires

  1. Conversion implicite byte, short -> float
    Par b_sky dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 15/01/2011, 00h11
  2. Conversion Integer -> byte[]
    Par La Truffe dans le forum Langage
    Réponses: 5
    Dernier message: 05/06/2006, 19h30
  3. [MFC] pb de conversion CString en unsigned short
    Par kanabzh29 dans le forum MFC
    Réponses: 5
    Dernier message: 04/05/2006, 11h29
  4. Conversion Enum <-> byte
    Par Don ViP dans le forum Langage
    Réponses: 5
    Dernier message: 03/05/2006, 15h51
  5. [VB.NET] Conversion int-> bytes sur 4 octets
    Par SteelBox dans le forum Windows Forms
    Réponses: 11
    Dernier message: 09/01/2005, 23h08

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