écriture fichier

[Résolu]
Signaler
Messages postés
22
Date d'inscription
vendredi 17 février 2006
Statut
Membre
Dernière intervention
5 mai 2009
-
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
-
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

Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
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 !"
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
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 !"
Messages postés
22
Date d'inscription
vendredi 17 février 2006
Statut
Membre
Dernière intervention
5 mai 2009

Ma question est donc:

comment ajouter les octets à 00?

Comment supprimer ceux qui se rajoute avant 0a?

Merci.
Messages postés
22
Date d'inscription
vendredi 17 février 2006
Statut
Membre
Dernière intervention
5 mai 2009

j'ai ouvert le fichier avec cette méthode :

int file = open(tim,
        _O_WRONLY|_O_TEXT | _O_CREAT) ;
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
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 !"
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
8
Pourquoi ne pas utiliser fwrite pour écrire les données directement, plutot que d'utiliser sprintf?

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
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
Messages postés
492
Date d'inscription
samedi 10 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2012
1
désola, j'avais pas vu :


+++++1 pour vecchio56

TuRn3r
Messages postés
22
Date d'inscription
vendredi 17 février 2006
Statut
Membre
Dernière intervention
5 mai 2009

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);

       
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
8
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
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
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 !"