Lire un fichier binaire

ultrafil Messages postés 10 Date d'inscription lundi 6 janvier 2003 Statut Membre Dernière intervention 6 mai 2005 - 22 janv. 2004 à 21:40
cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 - 26 janv. 2004 à 19:36
Salut, j'ai besoin de lire des données dans un fichier binaire.
Mon problème c'est que je n'arrive pas à faire de conversion en byte[]

Je m'explique, j'utilise FileStream.Read qui attend un byte[] en argument, le probleme c'est la conversion du byte[] en int ou en double, ou mieu encore en classe :(

J'ai tenté de convertir avec Convert avec System.Array apres avoir essayé les cast explicite mais rien a faire, si quelqu'un à une idée :) je suis preneur.

www.ultrafil.fr.st

5 réponses

cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 8
23 janv. 2004 à 06:20
Salut,

le mieux est de Désérialiser par la même Api que lors de la sérialisation.
Cela évite de descendre au niveau des Bytes

encore faut il avoir la main sur la création du fichier binaire...
0
ultrafil Messages postés 10 Date d'inscription lundi 6 janvier 2003 Statut Membre Dernière intervention 6 mai 2005
23 janv. 2004 à 14:05
En fait j'ai besion de lire un fichier .bsp (map de quake3) car je crée un moteur 3D en opengl (C# / csgl).

Et donc je n'ai pas le choix :( je dois absolument convertir mon byte[] en int voir en class.

Personne n'a un bout de code qui permettrais de faire ca? :)
ultrafil.fr.st
0
cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 8
23 janv. 2004 à 14:46
bon, alors il est toujours possible de lire le fichier par groupe de 4 octets et d'écrire une fonction de conversion en int
(sous réserve qu'il n'en existe pas dans la BCL)
br est le BinaryReader, tabInt un tableau de réception des ints

int i=0;
byte[] b = new byte[4];
while (br.Read(b,0,4)!=0)
{
tabInt[i++] = ToInt(b);
}

et maintenant, la grande fonction ToInt :
private int ToInt(byte[] b)
{
return b[0]+b[1]*256+b[2]*256*256+b[3]*256*256*256;
}
0
ultrafil Messages postés 10 Date d'inscription lundi 6 janvier 2003 Statut Membre Dernière intervention 6 mai 2005
26 janv. 2004 à 15:18
Je te remercie pour ton aide, ta technique doit surement bien fonctionner mais néammoins j'ai trouver la class BitConverter qui permet de faire exactement ce que j'ai besion :D

plus d'info sur: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystembitconverterclassgetbytestopic.asp

En faite cette classe BitConverter prend un tableu de byte en en choisit 4 (ou 8 si double)
contigue et les convert en float , int etc...

merci encore ^^

@++ et bon coding

ultrafil.fr.st
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 8
26 janv. 2004 à 19:36
c'est moi qui te remercie
je n'avais pas vu cette classe

on peut coder
byte[] b = new byte[4];
while (r.Read(b,0,4)!=0)
{
tabInt[i]=BitConverter.ToInt32(b,0);
}

l'intérêt est qu'il existe des conversions pour tous les types courants
0
Rejoignez-nous