gilou Modérateur Modzilla | Un truc comme ca devrait marcher si ton pb est d'ecrire comme un bit, un truc represente par un char, de valeur 0 ou 1: Tu appelles la fonction suivante avec flushend a false, et une fois ecrit ce que tu devais ecrire, tu l'appelle une fois avec flushend a true (bon, je presuppose que tu auras ecris exactement le nb de bits sauvegardes qque part avant, dans ton fichier, afin de pouvoir savoir ou tu t'arretes a la relecture):
Code :
- void writetruc(FILE *out, unsigned char val, bool flushend)
- {
- /* si c'est pas ecrit dans le bon ordre, inverser les valeurs de la table */
- static unsigned char[8] mask = {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01};
- static int rank = 0;
- static unsigned char value = 0;
- if (flushend)
- {
- fwrite(&value,1,1,out);
- fflush(out);
- return;
- }
- rank %= 8;
- if (val)
- value |= mask[rank];
- if (rank == 7)
- {
- fwrite(&value,1,1,out);
- value = 0;
- }
-
- rank++;
- }
|
ou en reprenant a mon compte l'astuce de la valeur finale ni a 0 ou a 1 pour flusher:
Code :
- void writetruc(FILE *out, unsigned char val)
- {
- /* si c'est pas ecrit dans le bon ordre, inverser les valeurs de la table */
- static unsigned char[8] mask = {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01};
- static int rank = 0;
- static unsigned char value = 0;
- if (val > 1)
- {
- fwrite(&value,1,1,out);
- fflush(out);
- return;
- }
- rank %= 8;
- if (val)
- value |= mask[rank];
- if (rank == 7)
- {
- fwrite(&value,1,1,out);
- value = 0;
- }
-
- rank++;
- }
|
A+, Message édité par gilou le 26-01-2004 à 14:36:14 ---------------
There's more than what can be linked! -- Iyashikei Anime Forever! -- AngularJS c'est un framework d'engulé! --
|