Tableau de byte -> float [Resolu] - Java - Programmation
MarshPosté 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 :
publicstaticfloat arr2float (byte[] arr, int start) {
int i = 0;
int len = 4;
int cnt = 0;
byte[] tmp = new byte[len];
for (i = start; i < (start + len); i++) {
tmp[cnt] = arr[i];
cnt++;
}
int accum = 0;
i = 0;
for ( int shiftBy = 0; shiftBy < 32; shiftBy += 8 ) {
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 ?
(http://www.captain.at/howto-java-convert-binary-data.php)
Message édité par jan san kar le 28-02-2007 à 10:49:14