Bonjour à tous (et toutes),

Voila mon problème :

Je voudrais écrire cette structure

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
typedef struct{
  int i;
  unsigned char vote ;
} enr;
dans un fichier de type binaire. Pour faire simple, j'ai un tableau d'un milliard de bits, codé sur 125 millions bytes. Je voudrais sauver seulement les bytes non null (car il y en a que maximum 10 millions qui sont non null), puisque sauver des 0 c'est bien, mais ça prend de la place et c'est null

J'ai eu l'idée de faire une structure qui prend l'indice dans le tableau, suivit de la valeur, et d'écrire cette structure dans un fichier.

Voici le code

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    int fd = 0;
    char* path = malloc (21);
    path = strcpy(path, getNameBKP());
 
    if((fd = open (path, O_CREAT|O_WRONLY, 00666 )) < 0)
        exit(-1);
 
    int i = -1;
    while(++i < NBVOTER) //NBVOTER = 1 000 000 000 /8 = 125 000 000
        if(vote[i]){
            enr en = {i, vote[i]};
            write(fd, &en, sizeof(en));
        }
    close(fd);
Le résultat que j'obtiens est assez bizarre.
Si dans mon tableau je n'ai (en hexa) que 04 à l'indice 3, dans mon fichier j'ai (en hexa) : 03 00 00 00 04 00 00 00

Si quelqu'un à une idée du pourquoi les bits de poids faible et fort sont inversés, et du comment les remettre dans le bon sens, ou du pourquoi un unsigned char passe sur 32 bits, ce serait chouette.


Merci d'avance

Ah oui, petits détails qui éviteront des posts inutiles, les chiffres 10E9 et 10E7 sont fixés, et je ne peux pas les changer, et j'ai pas envie de me retrouver avec des fichiers de 125Mo à chaque fois que je sauve mon tableau.