2
votes

Décharger un tableau INT32 dans un fichier .bin

J'ai le tableau défini comme ci-dessous

INT32 LUT_OffsetValues[6][12] = {
0,180,360,540,720,900,1080,1260,1440,1620,1800,1980,
2160,2340,2520,2700,2880,3060,3240,3420,3600,3780,3960,4140,
4320,4500,4680,4860,5040,5220,5400,5580,5760,5940,6120,6300,
6480,6660,6840,7020,7200,7380,7560,7740,7920,8100,8280,8460,
8640,8820,9000,9180,9360,9540,9720,9900,10080,10260,10440,10620,
10800,10980,11160,11340,11520,11700,11880,12060,12240,12420,12600,12780
};

int main(int argc,char *argv[])
{
 int var_row_index = 4 ;
int var_column_index = 5 ;
int computed_val = 0 ;
FILE *fp = NULL ;

fp = fopen("./LUT_Offset.bin","wb");
if(NULL != fp)
{
    fwrite(LUT_OffsetValues,sizeof(INT32),72,fp);
    fclose(fp);
}

printf("Size of Array:%d\n",sizeof(LUT_OffsetValues));
//computed_val  =  LUT_OffsetValues[var_row_index][var_column_index];
return 0;
}

Ci-dessus se trouve l'extrait de code avec lequel j'ai généré le fichier .bin. Est-ce la bonne façon de procéder?

c

0 commentaires

3 Réponses :


1
votes

Non, ce n'est pas la bonne façon si vous prévoyez de transférer le fichier sur une autre machine et de le lire car vous n'avez pas pris en compte le Endianness . Disons que le fichier est:

  1. Écrit dans la machine little endian mais lu dans la machine big endian
  2. Écrit dans une machine big endian mais lu dans une machine little endian

Cela ne fonctionnera dans aucun des cas ci-dessus.


0 commentaires

0
votes

Dans l'ordre des octets signalés par askinoor, cette voie n'est pas générique car le lecteur doit maintenant c'est un INT32 [6] [12] quand il le lit

Pourquoi les variables inutiles var_row_index etc dans votre programme?


0 commentaires

0
votes

Comme déjà mentionné, lors de la sérialisation des données dans et hors du CPU, il est préférable de forcer l'ordre des octets du réseau. Cela peut être fait facilement en utilisant des fonctions comme htonl () , qui devraient être disponibles sur la plupart des plates-formes (et compiler à rien sur les machines big endian).

Voici la documentation de Linux: https://linux.die.net/man/3/htonl

De plus, il n'est pas recommandé de coder explicitement les tailles et les types dans votre programme. Utilisez sizeof (array [0] [0]) pour obtenir la taille du type d'élément de array , puis parcourez dessus et utilisez htonl () pour écrire chaque élément dans le fichier.


0 commentaires