Enregistrer/Récupérer un nombre sur plusieurs octets

Signaler
Messages postés
248
Date d'inscription
mercredi 15 juin 2005
Statut
Membre
Dernière intervention
15 mars 2007
-
Messages postés
285
Date d'inscription
mardi 28 décembre 2004
Statut
Membre
Dernière intervention
20 janvier 2013
-
Bonjour,
J'aimerais enregistrer un nombre dans un fichier sur plusieurs octets de la meme façon qu'un long int, et pouvoir le recuperer...

Je m'explique :
un int est codé sur un octet donc 8 bits :
11111111

donc a pour valeur maximal 29-1 (=255)
un long int ( je ne saispas sur combien d'octet alors je mets 2 dans mon exemple ) :
11111111 11111111

donc a pour valeur maximale 217-1

j'aimerais faire pareil dans un fichier....

MERCI !

7 réponses

Messages postés
540
Date d'inscription
vendredi 25 juin 2004
Statut
Membre
Dernière intervention
1 octobre 2007
2
bah deja un int vaut generalement 4 et un int aussi..

mais pour les fichier (en C)

fread(variable,nbdeblock,tailleblockenoctet,fichierpointeur);// pour lire

fwrite(variable,nbdeblock,tailleblockenoctet,fichierpointeur);//pour ecrire.

et la tu choisi la taille des block !! et le nb de block..

j'ai jamais compris pourquoi y en avait deux..mais il sont la alors autant les utiliser...
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Au passage : 2^9-1 = 511.

Quand tu as "n" bit, tu peux obtenir un entier non signé de valeur maximale 2^n-1. Je sais pas d'ou tu sors ce 2^(n+1)-1
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010

Bonjour,

Pas très explicite ton exemple, explique un peu plus si tu veux qu'on t'aide...

rrk275 -> 1) fread et fwrite c'est sur windows et rien ne permet de dire qu'il est sous windows ... 2) Tu n'as pas compris pourquoi il y avait deux quoi ???

Matt...
Messages postés
285
Date d'inscription
mardi 28 décembre 2004
Statut
Membre
Dernière intervention
20 janvier 2013

Salut !

tekila_bandita > Sur une plateforme PC Win32 :
char = 8bits
short = 16bits long int 32bits
Ces valeurs sont vraies pour toutes les plateformes a l'exception du int qui est codé sur un nombre de bits égale à la taille du bus de données (si c'est un processeur 12bits, le int est sur 12bits également)

luthor > Il faudrait effectivement qu'il revoye ses cours de binaire

Matt67 > C'est vrai que ce n'est pas explicite pour un sous, cependant ta reflexion a rrk275 est completement fausse. fopen, fread, fwrite, fclose, .... toutes ces fonctions sont définies dans stdlib.h ou stdio.h (je sais plus laquel mais c'est pas bien important).
Tu remarquera les 3 premieres lettres du fichier : STD, ca veut dire standard. C'est du C, comme les C est compilable et exécutabe en C++, ca rend ces fonctions compatibles sous toutes plateformes pourvue d'un compilateur C/C++

Le travail c'est la santé, ne rien faire c'est la préservé !!!
Messages postés
540
Date d'inscription
vendredi 25 juin 2004
Statut
Membre
Dernière intervention
1 octobre 2007
2
Quand je dis je n'ai pas compris pourquoi deux block , c'est parce
qu'un seul aurait pu suffire (je parle du nbblock et taille bloc..) car
le nombre total d'octet est un simple multiplication de ces deux la ..
(peut etre une maniere de ranger.(quel interet...))

et qu'on on connait mal on agressif et de maniere general mieu vaut
etre poli .. surtout qu'on on contredit qqun (meme si on a raison !! !! (un petit smiley qui sourit .. c'est pas grand chose mais ca change la connotation .. ))
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010

Bonsoir,

Vous remarquerez que le message était matinal et je fais mes plus plates excuses à rrk275...
Effectivement fread et fwrite c'est dans stdio.h j'ai confondu avec writefile, readfile (de chez windows).

Pour rrk275 -> je ne suis pas agressif du tout.
size_t fread (void *ptr, size_t size, size_t nmemb, FILE *stream);
exemple :
int tab[10];
FILE *fp;
[../..]
fread(tab, sizeof(int), 10, fp)
[../..]

Matt...
Messages postés
285
Date d'inscription
mardi 28 décembre 2004
Statut
Membre
Dernière intervention
20 janvier 2013

Explication sur le pourquoi specifier une taille de bloque dans fread :
A l'origine c'etait pour lire des bloque complet, je m'explique, tu creer une structure qui fait 1024 octets(une fiche de renseignement personnel par exemple). Tu en enregistre 10 dans un fichier. Et quand tu lit ce fichier, manque de bol, tu t'appercoit que ta derniere structure n'est pas complete, elle ne pese que 950 octets. En specifiant une taille de bloque de 1024, ta derniere structure n'est pas lut car elle n'est pas complete.

Maintenant, c'est ce qui etait prevu a l'origine, je n'ai pas tester si ca fonctionne reellement. Sachant que c'est des fonction standards, elles peuvent changer legerement de comportement selon la platerforme. Je ne peux donc pas affirmer que ca fonctionne.