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

Collection et Stream Java Discussion :

Comment convertir un tableau de byte en un float ?


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Etudiant Télécom. HEIG-VD
    Inscrit en
    Juillet 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant Télécom. HEIG-VD

    Informations forums :
    Inscription : Juillet 2011
    Messages : 7
    Par défaut Comment convertir un tableau de byte en un float ?
    Bonjour à tous,
    Je vous implore aujourd'hui car je commence à être à bout d'idée. Le concept est simple, convertir un tableau de byte (en l’occurrence de taille 4) en un float.
    La taille au niveau de la mémoire est la même et en parcourant les forums je n'ai pu encore trouver une solution qui me permette d'obtenir un résultat correct.

    Les 4 bytes contenus dans le tableau forment un nombre flottant sur 32 bit au format IEEE754, j'aimerais juste les pusher dans un float qui a le même format et la même taille.

    Merci d'avance
    Alex.

  2. #2
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    bah doit y avoir plein de solutions....

    perso je pense à un truc comme ça:

    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
     
    public static void main(String[] args) {
    		byte[] ba = new byte[]{(byte)1, (byte)2, (byte)3, (byte)4};
    		float f = readFloat(ba);		
    		System.out.println(f);
    	}
    	private static float readFloat(byte[] ba) {
    		if(ba.length!=4) throw new RuntimeException("must have a length of 4");
     
    		DataInputStream dis = null;
    		try {
    			dis = new DataInputStream(new ByteArrayInputStream(ba));
    			return dis.readFloat();
    		} catch (IOException e) {
    			throw new RuntimeException("oups!", e);
    		} finally {
    			if(dis !=null)
    				try {
    					dis.close();
    				} catch (Exception e) {
    					// ignore - pokemon exception - gotta catch'em all! - dont do this in real life!
    				}
    		}
    	}
    mais y'a plein de solutions imagineables


  3. #3
    Membre habitué
    Homme Profil pro
    Etudiant Télécom. HEIG-VD
    Inscrit en
    Juillet 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant Télécom. HEIG-VD

    Informations forums :
    Inscription : Juillet 2011
    Messages : 7
    Par défaut
    Merci bien, en effet ça fonctionne ! Je pense avoir tout de même d'autre problèmes, car je dump une mémoire et je n'ai toujours pas les bon résultats...

    Merci pour la réponse, bonne soirée
    Alex.

    Citation Envoyé par Pill_S Voir le message
    bah doit y avoir plein de solutions....

    perso je pense à un truc comme ça:

    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
     
    public static void main(String[] args) {
    		byte[] ba = new byte[]{(byte)1, (byte)2, (byte)3, (byte)4};
    		float f = readFloat(ba);		
    		System.out.println(f);
    	}
    	private static float readFloat(byte[] ba) {
    		if(ba.length!=4) throw new RuntimeException("must have a length of 4");
     
    		DataInputStream dis = null;
    		try {
    			dis = new DataInputStream(new ByteArrayInputStream(ba));
    			return dis.readFloat();
    		} catch (IOException e) {
    			throw new RuntimeException("oups!", e);
    		} finally {
    			if(dis !=null)
    				try {
    					dis.close();
    				} catch (Exception e) {
    					// ignore - pokemon exception - gotta catch'em all! - dont do this in real life!
    				}
    		}
    	}
    mais y'a plein de solutions imagineables


  4. #4
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    y'a pt-être un souci d'ordre (BE vs LE), essaie de permutter tes bytes avant de convertir le float

  5. #5
    Membre habitué
    Homme Profil pro
    Etudiant Télécom. HEIG-VD
    Inscrit en
    Juillet 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Etudiant Télécom. HEIG-VD

    Informations forums :
    Inscription : Juillet 2011
    Messages : 7
    Par défaut
    J'y ai pensé, mais en regardant l'hexa obtenu j'obtient un format un peu bizarre, pour obtenir quelque chose de censé, je garde le premier byte tel quel, et je doit faire un décalage de bit à droite sur les trois autres bytes pour obtenir le bon résultat :S

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Personnellement, j'utiliserais Float.intBitsToFloat() -_-°

    Il reste à convertir le tableau de 4 bytes en un int.

    Hop :

    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
    public class Bytes {
     
      public static int bytesToInt(byte[] bytes) {
        return
          (bytes[0] << 24) |
          ((bytes[1] & 0xFF) << 16) |
          ((bytes[2] & 0xFF) << 8) |
          (bytes[3] & 0xFF);
      }
     
      public static float bytesToFloat(byte[] bytes) {
        return Float.intBitsToFloat(bytesToInt(bytes));
      }
     
    }
    Où il peut effectivement y avoir des embrouilles de boutisme. Dans ce cas, il suffit d'inverser dans bytesToInt().
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Java Card - Convertir une tableau de byte en clé publique
    Par garudah dans le forum Développement Mobile en Java
    Réponses: 0
    Dernier message: 03/07/2009, 11h19
  2. Comment convertir un tableau de données en fichier texte?
    Par pimprenelle57 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 22/11/2006, 16h12
  3. [C#] Convertir un tableau de byte en Image
    Par goulhasch dans le forum ASP.NET
    Réponses: 4
    Dernier message: 24/01/2005, 10h12

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