Bonjour,
Je cherche à adapter du code C en Java.
L'une des fonctions me pose problème.
Il s'agit de lire dans un fichier des longs qui ont été écrits puis lus dans le fichier avec les fonctions suivantes du langage C :
où l'on lit / écrit l'équivalent d'un long (4 octets x 1) avec les paramètres suivants :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 fwrite(&donnee, 4, 1, fich); fread(&donnee, 4, 1, fich);
- donnee est un long où l'on lit ou écrit
- 4 correspond au nombre d'octets à lire ou écrire pour chaque élément
- 1 correspond au nombre d'éléments à lire ou écrire
- fich est le fichier où l'on lit ou écrit
Donc, j'ai tenté de transposer cela en Java de la manière suivante afin de lire le fichier écrit précédemment :
Sachant que TabNum est un tableau de long, la première astuce consiste à comprendre (je crois, corrigez si erreur !) qu'un long en C est de taille 4 octets alors qu'en Java il est de taille 8 octets.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 inputBinaryFile = new FileInputStream (NomDuFichier); // Fichier binaire inputBinaryData = new DataInputStream (inputBinaryFile); // Le même fichier via stream int NbDonneesLues=0; for(;;){ TabNum [NbDonneesLues] = (long)inputBinaryData.readInt (); NbDonneesLues++; }
Cela explique dans mon code le readInt casté en long puis rangé dans un tableau de longs.
Résultat au final :
Ca donne des nombres super longs, voire négatifs. Bref, rien à voir avec les données lues et écrites à l'origine en C.
J'ai essayé avec readLong (qui lit 8 octets donc) et logiquement ça ne lit pas correctement non plus.
Est-ce que vous avez des idées ?
Partager