[Resolu] Tableau de byte -> float

Tableau de byte -> float [Resolu] - Java - Programmation

Marsh Posté le 28-02-2007 à 10:37:16    

Bonjour,
Donc j'ai un soucis étrange.
 
En résumé je récupère un flux de bytes d'une base de données (qui a été créé en C++ (le flux pas la base)).
LargeObject objet_donnees = lobj.open(oid);
 
ensuite je lis une ligne de données complète
byte[] tab_byte = objet_donnees.read(720*4);
comme il s'agit de float je lis un multiple de 4 byte
 
puis je wrap ça dans un ByteBuffer qui normalement doit me convertir ces bytes en float
ByteBuffer byte_buf = ByteBuffer.wrap(tab_byte);
puis
float valeur = byte_buf.getFloat();
(et ça avance dans le buffer (j'ai une boucle dessus qui va de i=1 à i*4<=byte_buf.capacity() en incrémentant i de 1))
 
et donc le soucis est que ma valeur en system.out.println est vraiment étrange
du genre si je la sort en hexa :
0x0.014082p-126
et donc en normal
5.7488E-41
ce qui est plutot chelou
 
Aurai-je fais une erreur idiote quelque part ? (par exemple le println permet-il vraiment de faire ça ?)
Ou alors c'est un soucis de conversion que je n'ai pas compris ?
 
(rq : j'ai mis les types de données histoire de bien montrer ce que je manipule)
 
ps :  
j'ai trouvé un code qui fait une conversion, donc est-ce que le bytebuffer ne sert donc pas à ça et qu'il faut utiliser un truc comme ci-dessous ?

Code :
  1. public static float arr2float (byte[] arr, int start) {
  2.  int i = 0;
  3.  int len = 4;
  4.  int cnt = 0;
  5.  byte[] tmp = new byte[len];
  6.  for (i = start; i < (start + len); i++) {
  7.   tmp[cnt] = arr[i];
  8.   cnt++;
  9.  }
  10.  int accum = 0;
  11.  i = 0;
  12.  for ( int shiftBy = 0; shiftBy < 32; shiftBy += 8 ) {
  13.   accum |= ( (long)( tmp[i] & 0xff ) ) << shiftBy;
  14.   i++;
  15.  }
  16.  return Float.intBitsToFloat(accum);
  17. }


(http://www.captain.at/howto-java-convert-binary-data.php)


Message édité par jan san kar le 28-02-2007 à 10:49:14
Reply

Marsh Posté le 28-02-2007 à 10:37:16   

Reply

Marsh Posté le 28-02-2007 à 10:48:37    

Bon histoire de faire un suivi : oui ça marche vachement mieux avec la fonction donnée au dessus
sinon c'est bien le java c'est simple [:petrus75]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed