Ecrire octet par octet dans un fichier

cs_naycos Messages postés 5 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 10 février 2006 - 22 avril 2004 à 16:19
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 - 22 avril 2004 à 20:31
Voila je dois travailler dans un fichier ouvert en binaire (mode "w+b")

Le but est d'écrire octet par octet. Bon du coup je me tourne naturelllement vers la fonction fwrite. Seulement avec celle-ci je sais pas comment procéder.

J'ai un code binaire sous forme de chaine, exemple: "00000101"
et je veux initialiser un caractère avec ce code. Or un caractère s'initialise entre 2 cote (''). Si je met:

LeChar = '00000101' ben ça marche pas!

Parce que je voudrais bien faire:

fwrite(&LeChar,sizeof(char),1,fic);

Car un caractère fait 1 octet je crois. Ou peut être existe t'il une solution plus simple.

Merci de bien vouloir m'aider

7 réponses

hilairenicolas Messages postés 398 Date d'inscription jeudi 30 octobre 2003 Statut Membre Dernière intervention 15 juin 2007 2
22 avril 2004 à 16:27
faut convertir la chaine binaire en octet (entier), déjà vu, avec une recherche tu devrais pouvoir trouver
puis un fwrite classique
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
22 avril 2004 à 16:55
pour transformer une chaine en char:
unsigned char strToChar(char* s)
{
unsigned char a = 0;
for(int i = 0; i < 8; i++)
if(s[7 - i] == '1')
a |= (1 << i);
return a;
}
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
22 avril 2004 à 16:57
je viens de remarquer que ma fonction ne marche pas si on n'écrit pas les zéros non significatifs de gauche
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
22 avril 2004 à 17:00
unsigned char strToChar(const char* s)
{
unsigned char a = 0;
int n = strlen(s);
for(int i = n; i > -1; i--)
if(s[n - 1 - i] == '1')
a |= (1 << i);
return a;
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
hilairenicolas Messages postés 398 Date d'inscription jeudi 30 octobre 2003 Statut Membre Dernière intervention 15 juin 2007 2
22 avril 2004 à 17:22
bon, j'avais la flemme de chercher tout à l'heure, voici ce dont je parlais, écrit par Brunews

int strBinToInt(char *psz)
{
int r = 0;
char *c = psz;
while(*c) {
if(*c < '0' || *c > '1') break;
r <<= 1;
if(*c == '1') r |= 1;
c++;
}
return r;;
}

tu t'adaptes à ton pb ou bien tu fais un cast sur un octet, mais ca va te limiter à 255
mieux vaut pas écrire un entier et puis écrire le nombre d'octer correspondant à l'entier ?
0
cs_pheno Messages postés 141 Date d'inscription mardi 30 avril 2002 Statut Membre Dernière intervention 23 mars 2005 1
22 avril 2004 à 18:31
Salut
ca sent le tp note sur Huffman de 1ere année à 3IL
je me trompes??
Amitié

Chevalier Pheno Starboard, membre de la Freeman-Corp
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
22 avril 2004 à 20:31
pourquoi ecrire dans le fichier octet par octet ?
0
Rejoignez-nous