écriture fichier

Résolu
thorodin Messages postés 22 Date d'inscription vendredi 17 février 2006 Statut Membre Dernière intervention 5 mai 2009 - 18 août 2006 à 11:47
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 - 18 août 2006 à 23:11
Salut,

Quand
j'enregiste une jpeg sur la caméra et que je la transfère par
filezilla  le fichier  édité  avec  hexedit  donne (pour la première
ligne) :

ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00  01

(dans ce cas l'image est bonne)
 
Quand j'ouvre le fichier sur la caméra et que je le transfère par socket au PC , j'ai pour la première ligne :

ff d8 ff e0 10 4a 46 49 46 01 01 01 01 ff db 43

=> il n'écrit pas les octets à 00!!!

voila grosso modo mon code

char*image = (char*)malloc(sizeof(unsigned char)*22133) ;
memset(image,0,22133) ;

    count=recv(csock,(char *)image,22133,0);
    printf("Count=%d",count);
    for (y = 0; y <22133; y++)
      { 
                    sprintf(buf,"%c",(unsigned char)image[y]);
                    put_header_line(file,buf); 
      }

En plus, quand j'utilise ce code à chaque fois qu'il y a 0a il ajoute un 0d devant par rapport au fichier original.

A+.

11 réponses

yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 3
18 août 2006 à 15:26
Essaie avec ça au début à la place de la première ligne :

fichier = fopen(tim, "wb");

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
3
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 3
18 août 2006 à 11:56
Salut,

Tu as ouvert ton fichier en mode binaire ?

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
0
thorodin Messages postés 22 Date d'inscription vendredi 17 février 2006 Statut Membre Dernière intervention 5 mai 2009
18 août 2006 à 11:57
Ma question est donc:

comment ajouter les octets à 00?

Comment supprimer ceux qui se rajoute avant 0a?

Merci.
0
thorodin Messages postés 22 Date d'inscription vendredi 17 février 2006 Statut Membre Dernière intervention 5 mai 2009
18 août 2006 à 11:58
j'ai ouvert le fichier avec cette méthode :

int file = open(tim,
        _O_WRONLY|_O_TEXT | _O_CREAT) ;
0

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

Posez votre question
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 3
18 août 2006 à 12:02
Au lieu de _O_TEXT, essaye avec _O_BINARY à la place.
Tiens-moi au courant.

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 12
18 août 2006 à 12:13
Pourquoi ne pas utiliser fwrite pour écrire les données directement, plutot que d'utiliser sprintf?

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
turnerom Messages postés 492 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 12 janvier 2012 1
18 août 2006 à 12:46
Salut,

essay avec p dans le sprintf, plus quelques modifs que voici :

unsigned char*image = (unsigned char*)malloc(sizeof(unsigned char)*22133) ;

memset(image,0,22133) ;


    count=recv(csock,(char *)image,22133,0);

    printf("Count=%d",count);

    for (size_t y = 0; y <22133; y++)

      { 

                   
sprintf(buf, "%p", (char*)image[y]);

                   
put_header_line(file,buf); 

      }


Ps : y'a que moi que ca choquait (meme si ca change pas grand chose):
char
* image = (char*)malloc(sizeof(unsigned char)*22133) ;
?

TuRn3r
0
turnerom Messages postés 492 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 12 janvier 2012 1
18 août 2006 à 12:47
désola, j'avais pas vu :


+++++1 pour vecchio56

TuRn3r
0
thorodin Messages postés 22 Date d'inscription vendredi 17 février 2006 Statut Membre Dernière intervention 5 mai 2009
18 août 2006 à 14:48
Merci vecchio 56 .

Dans le fichier en hexa, il rajoute les 00 mais il reste le problème des 0d qui se rajoutent avant les 0a. Maintenant, il reconnait une image jpeg mais avec l'aperçu, l'image est brouillée.

J'ai modifié le code de la façon suivante:

fichier = fopen(tim,"w") ;
    
    count=recv(csock,(char *)image,22133,0);
    printf("Count=%d",count);
    
    for (y = 0; y <22133; y++)
      {                  
           fwrite(&image[y],sizeof(char),1,fichier);              
      }
 
    fclose(fichier);

       
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 12
18 août 2006 à 22:18
L'explication c'est qu'en mode ASCII, les retours chariots sont automatiquement transformés au format Windows, donc si tu lui dit d'écrire \n seulement, il va écrire \r\n

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 3
18 août 2006 à 23:11
Merci pour l'explication vecchio.
J'ai encore appris un truc, avant de me coucher...moins c.. :-p

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
0