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 :

octet en double ou en float ?? [FAQ]


Sujet :

Langage Java

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2004
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 123
    Par défaut octet en double ou en float ??
    hello tlm, j'ai des octet, je veux les converstir en long ou en double.
    en c, on fait des casse de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    byte []b;
    b= new bytes [100];
    long l=(long) b;
    double d=(double) b;
    mais en java,j'ai pas trouvé comment on fait.

    pour la convertir en string, j'ai trouvé ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String str = new String(b, 0, 0, 100);
    mais en double et long, pas trouvé.

    qlq'un serai me le dire svp ? merci d'avance

  2. #2
    Membre confirmé
    Inscrit en
    Janvier 2006
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 204
    Par défaut
    si tu veux transformer un string en double tu fais

    (Double.valueOf(ValeurString));

  3. #3
    Membre émérite Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Par défaut
    dans la classe Byte, il y a les fonctions longValue() et doubleValue()

    je sais pas si c'est ce que tu cherches

  4. #4
    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
    Par défaut
    Citation Envoyé par remika
    dans la classe Byte, il y a les fonctions longValue() et doubleValue()

    je sais pas si c'est ce que tu cherches
    euh,
    byte b = 100;
    long l = (long) b;

    ça devrait marcher, non?

    pareil pour double...

    Après c sûr tu veux convertir un tableau de bytes et long, c pas possible, faut que tu te fasses un tableau de long, et tu convertis chaque byte en long (ou alors j'ai pas compris ce que tu voulais)...
    A moins qu'à partir de 8 bytes tu voudrais avoir un long?

  5. #5
    Membre émérite Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Par défaut
    Citation Envoyé par ®om
    byte b = 100;
    long l = (long) b;
    oui c'est vrai désolé

  6. #6
    Membre confirmé
    Inscrit en
    Janvier 2004
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 123
    Par défaut
    oui j'ai 4bytes pour un long et 8 bytes pour un double.
    j'ai fait un lecture de 4 bytes sur un fichier binaires pour avoir un long et 8 pour avoir un double.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    connection_fichier_bytes.read(b,0,4);
    dans mon tableau de bytes, les 4 bytes forme un long

    et les (long)b ou (double)b ne marhce pas, vu b est un tableau de byte.

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 109
    Par défaut
    En fait tu as qqch du genre :
    * bits 0 à 7 du long stocké dans b[0]
    * bits 8 à 15 du long stocké dans b[1]
    ...etc
    C'est bien ça ?

    Il me semble que tu dois utiliser l'opérateur de décalage et le "ou" bit à bit. Essaye quelque chose du genre (je n'ai pas testé):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    long l0 = (long) b[0];
     
    long l1 = (long) b[1];
    l1 = l1<<8; //on décale à gauche de 8 bits
     
    long l2 = (long) b[2];
     l2 = l2<<16; //on décale à gauche de 16 bits
     
    long l3 = (long) b[3];
      l3 = l3<<24; 
     
    //pour avoir le résultat, on fait un "ou" bit à bit (opérateur "pipe")
    long res = l0 | l1 | l2 | l3;
    Par contre ces opérateurs n'acceptent que des entiers pour opérande. Je ne sais pas comment faire pour le double.

  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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DataInputStream dis = new DataInputStream(new ByteArrayInputStream(b));
    dis.readLong();
    dis.readDouble();

  9. #9
    Membre confirmé
    Inscrit en
    Janvier 2004
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 123
    Par défaut
    Citation Envoyé par ®om
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DataInputStream dis = new DataInputStream(new ByteArrayInputStream(b));
    dis.readLong();
    dis.readDouble();
    dis.readLong(); c'est pour 8octet.

    MangeurVasqué, je crois que tu melange les bytes et bits.
    un bytes = 1 octect = 8 bits.
    un long = 8 octet sur java mais 4 octets sur C (32bits)
    et un double = 8 octet = 64bits.

  10. #10
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Citation Envoyé par MangeurVasqué
    [...]
    //pour avoir le résultat, on fait un "ou" bit à bit (opérateur "pipe")
    long res = l0 | l1 | l2 | l3;[/code]
    Par contre ces opérateurs n'acceptent que des entiers pour opérande. Je ne sais pas comment faire pour le double.
    => Double.longBitsToDouble(long bits)
    Et inversement Double.doubleToLongBits(double value) et Double.doubleToRawLongBits(double value), rien de bien compliqué ou sorcier donc.

    Par contre là où ca peut coincer c'est que les opérandes binaires ^, | et & ne produisent que des int sur 32-bits donc... (les décalages <<, <<<, >> et >>> eux fonctionnent sur des int ou des long) il faut donc utiliser une autre astuce pour reconstruire ton long. (peut-être en produisant 2 int, en multipliant le 1er par un long == 2^32 et en ajoutant les 2 bouts dans un long OU alors en passant par une représentation du nombre binaire en chaine ?). Sinon l'idée était bonne.

    http://java.sun.com/docs/books/jls/s....doc.html#5121
    http://java.sun.com/docs/books/jls/s....doc.html#5233
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  11. #11
    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
    Par défaut
    Citation Envoyé par lykim
    dis.readLong(); c'est pour 8octet.
    Oui... Ce n'est pas ce qu'il veut faire?
    S'il n'en veut que 4, il fait un readInt() à la place...

  12. #12
    Membre confirmé
    Inscrit en
    Janvier 2004
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 123
    Par défaut
    merci pour l'aide.
    j'ai pris la solution facile.
    readint()
    et readdouble.

    mais j'ai un autre probleme.
    mon fichier est en petit indien et le java lit en grand indien. ( ou l'invers )
    bref, comment change de petit indien en grand indien svp pour les methode readint ou readdouble??

  13. #13
    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
    Par défaut
    Citation Envoyé par lykim
    mais j'ai un autre probleme.
    mon fichier est en petit indien et le java lit en grand indien. ( ou l'invers )
    bref, comment change de petit indien en grand indien svp pour les methode readint ou readdouble??
    À part inverser l'ordre de ton tableau (enfin, 4 octets par 4 octets) avant les readInt(), je ne vois pas...

  14. #14
    Membre confirmé
    Inscrit en
    Janvier 2004
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 123
    Par défaut
    il y a pas de tableau, c'est un fichier binaire que je lis.
    >__<

  15. #15
    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
    Par défaut
    Citation Envoyé par lykim
    il y a pas de tableau, c'est un fichier binaire que je lis.
    >__<
    Et bien, a partir de ton fichier binaire, tu lis 4 bytes, que tu mets en tab[3] tab[2] tab[1] et tab[0], et tu fais un datainputstream sur ton tab...

  16. #16
    Membre confirmé
    Inscrit en
    Janvier 2004
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 123
    Par défaut
    OMGGGG
    le bonheur !!!
    ca serai bien d'ajouter ca a FAQ de java.
    http://mindprod.com/jgloss/endian.html


    bon voila j'ai resolu mon probleme et encore merci a tlm ^^

  17. #17
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Hum apparement j'avais mal lu :

    The type of the bitwise operator expression is the promoted type of the operands.
    et plus haut pour la promotion de type :

    Otherwise, if either operand is of type long, the other is converted to long.
    Donc effectivement le | (OR) devrait bien fonctionner avec des long meme si ce n'est pas explicitement ennonce contrairement a la doc des decalages. A tester en composant des grands nombres entre eux...

    Sinon : les classes du package java.nio ont des methodes permettant de lire directement un flux en little-endian.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

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

Discussions similaires

  1. récupérer valeur d'un double dans 2 float
    Par psycho_xn dans le forum Général Java
    Réponses: 23
    Dernier message: 07/12/2009, 13h43
  2. Convertir un tableau de 8 octet en double IEEE 754
    Par dieuzorro dans le forum VB.NET
    Réponses: 1
    Dernier message: 29/08/2008, 08h56
  3. C# double et sql Float
    Par Goupil dans le forum C#
    Réponses: 2
    Dernier message: 11/08/2008, 14h20
  4. petite question sur les doubles et les float !
    Par kamouminator dans le forum C
    Réponses: 3
    Dernier message: 10/11/2006, 19h58
  5. Conversion 8 octets en double
    Par Invité dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 09/08/2004, 16h49

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