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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
fwrite(&donnee, 4, 1, fich);
 
fread(&donnee, 4, 1, fich);
où l'on lit / écrit l'équivalent d'un long (4 octets x 1) avec les paramètres suivants :
- 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 :
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++;                                            
}
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.

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 ?