Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
596 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

[C] Copier un fichier octet par octet dans un tableau

n°1375073
Arry
Posté le 25-05-2006 à 20:13:09  profilanswer
 

Reprise du message précédent :
Bah je sais pas à vrai dire, comme je veux des nombres je me suis dis que int ça irai très bien ...
 
skelter pourquoi quand j'utilise ta methode mes "128" ce transforment tous en "-128" ?

Message cité 1 fois
Message édité par Arry le 25-05-2006 à 20:22:16
mood
Publicité
Posté le 25-05-2006 à 20:13:09  profilanswer
 

n°1375077
skelter
Posté le 25-05-2006 à 20:17:50  profilanswer
 

:??:
 

skelter a écrit :

tab est de type 'int *' alors si sizeof(int) > 1 ton fread(..., 1, 1, ...) ne lira que un byte dans l'element courant (d'adresse tab+i)


 
tu veux faire quoi exactement, tu veux lire quoi dans ton fichier ?

n°1375106
Trap D
Posté le 25-05-2006 à 20:55:04  profilanswer
 

Oubli du test de retour de malloc.

n°1375119
Arry
Posté le 25-05-2006 à 21:13:42  profilanswer
 

skelter a écrit :

:??:
 
 
 
tu veux faire quoi exactement, tu veux lire quoi dans ton fichier ?


 
Alors ce que je veux c'est enregistrer un à un les octets du fichier bmp dans un tableau
Les 6 premiers octets d'une part, pour avoir la taille totale du fichier
Le reste d'autre part pour pouvoir faire les modifications que je veux effectuer dessu.
 
 
Et escusez moi de mon ignorance mais qu'est-ce qu'un "test de retour de malloc" ?

n°1375127
skelter
Posté le 25-05-2006 à 21:26:02  profilanswer
 

l'allocation peut echouer, dans ce cas malloc retourne NULL, c'est un cas a prendre en compte (comme quand tu testes le retour de fopen)
 
 

Citation :

Les 6 premiers octets d'une part, pour avoir la taille totale du fichier


 
tu veux dire que tu veux lire 6 octets que tu dois interpreté comme un entier ? tu es sur que c'est 6 octets ?
 

Citation :

Le reste d'autre part pour pouvoir faire les modifications que je veux effectuer dessu.


 
tu connais la structure du fichier ?

n°1375134
Emmanuel D​elahaye
C is a sharp tool
Posté le 25-05-2006 à 21:36:34  profilanswer
 

Arry a écrit :

là j'ai pas compris l'interet


Ce code sert à 'lier' la création du bloc mémoire et son usage. Si la valeur de size est modifiée, la modif s'applique automatiquement à la création et à l'usage, ce qui garanti le bon fonctionnement. C'est de la programmation 'intelligente' qui rend le code 'auto-démerdant'.
 
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1375136
Emmanuel D​elahaye
C is a sharp tool
Posté le 25-05-2006 à 21:40:58  profilanswer
 

Arry a écrit :

Et escusez moi de mon ignorance mais qu'est-ce qu'un "test de retour de malloc" ?


Justement, non. Ton ignorance est dangereuse. Tu te lances dans des manipulations compelxes mettant en jeu des fichiers, de la mémoire, et ce, sans connaître les bases du langage C.
 
http://mapage.noos.fr/emdel/images/c_warn.png
 
Je te conseille de te former. Je pense que ce cours 'jeune et ludique' te conviendra : Cours de C (Laisse tomber la partie SDL pour le moment)


Message édité par Emmanuel Delahaye le 25-05-2006 à 21:42:10

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1375180
Arry
Posté le 25-05-2006 à 22:42:21  profilanswer
 

Ouai m'enfin le seul test de retour de malloc que je connaisse :

Code :
  1. if( tab == NULL )
  2.     {
  3.      fprintf(stderr,"Allocation impossible" );
  4.      exit(-1);
  5.      }


Ne change rien à mon soucis du "-128" ...

n°1375185
Arry
Posté le 25-05-2006 à 22:50:26  profilanswer
 

skelter a écrit :


tu veux dire que tu veux lire 6 octets que tu dois interpreté comme un entier ? tu es sur que c'est 6 octets ?
 
tu connais la structure du fichier ?


 
Nan c'est 4 octets, mais ce sont les 3,4,5 et 6ème octets donc je copie les 6 premiers
Et oui je connais la structure du fichier, les 54 premiers octets forment l'entete, et après chaque pixel est codé sur 3 octets :
en premier vient l'octet pour coder le bleu, ensuite le vert puis le rouge, puisqu'on travail en 24bits.
Chaque octet code donc une composante RVB comprise entre 0 et 255, et je dois réccuperer chacune des composantes de chaques pixels pour appliquer la DCT voilà
En gros toute la partie traitement de l'image de mon programme est terminée... le seul soucis, et le plus gros, c'est que je ne sais pas comment stocker les octets dans un tableau. Enfin je suis près du but mais il y a toujours ce problème de "-".

n°1375186
Joel F
Real men use unique_ptr
Posté le 25-05-2006 à 22:53:18  profilanswer
 

se renseigner sur char et unsigned char me semble une bonne idée :o

mood
Publicité
Posté le 25-05-2006 à 22:53:18  profilanswer
 

n°1375187
Emmanuel D​elahaye
C is a sharp tool
Posté le 25-05-2006 à 22:53:57  profilanswer
 

Arry a écrit :

le seul soucis, et le plus gros, c'est que je ne sais pas comment stocker les octets dans un tableau.


En fonction des indications de taille contenues dans l'entête du fichier BMP, définir un tableau dynamique de unsigned char, puis le charger avec fread() et les bons paramètres...
 
Pas de difficultés particulières.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1375190
Arry
Posté le 25-05-2006 à 22:55:57  profilanswer
 

Nan mais jusque là ça marche ... mais pourquoi ai-je "-128" au lieu de 128 dans tout mon tableau ?

n°1375192
simple_stu​pid
Keep It Simple Stupid
Posté le 25-05-2006 à 22:57:04  profilanswer
 

Salut.
Un truc qui me paraît bizarre, c'est copier un fichier dans un tableau. Pourquoi ne pas le maper dans l'espace d'adressage du processus, en utilisant mmap()?
Ca ferait exactement ce qu'il veut, puisqu'il aurait accès aux éléments par un tableau (par un pointeur, mais l'arithmétique est identique).


Message édité par simple_stupid le 26-05-2006 à 09:40:22
n°1375193
Joel F
Real men use unique_ptr
Posté le 25-05-2006 à 22:57:11  profilanswer
 

se renseigner sur char et unsigned char me semble une bonne idée :o  :sarcastic:  

n°1375194
Emmanuel D​elahaye
C is a sharp tool
Posté le 25-05-2006 à 23:01:22  profilanswer
 

Arry a écrit :

Nan mais jusque là ça marche ... mais pourquoi ai-je "-128" au lieu de 128 dans tout mon tableau ?


Il est bien de type unsigned char comme déjà indiqué ? Et comment tu fais pour visualiser ce -128 ? Si tu utilises printf(), il faut utiliser le bon formatteur et le bon cast... La valeur peut être correcte, mais mal convertie par printf().
 
 
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1375197
Arry
Posté le 25-05-2006 à 23:05:16  profilanswer
 

Joel F a écrit :

se renseigner sur char et unsigned char me semble une bonne idée :o  :sarcastic:


 
Merci pour ce conseil j'ai vu, j'ai lu et ça marche :)

n°1375204
Sve@r
Posté le 25-05-2006 à 23:19:15  profilanswer
 

Arry a écrit :

Bah je sais pas à vrai dire, comme je veux des nombres je me suis dis que int ça irai très bien ...
 
skelter pourquoi quand j'utilise ta methode mes "128" ce transforment tous en "-128" ?


 
Parce que ton "char" est signé par défaut.  
La plage d'un char signé va de -128 à 127 dans cet ordre:

  • de 0 à 127 puis de -128 à -1

La plage d'un char non signé va de 0 à 255 dans cet ordre

  • de 0 à 127 puis de 128 à 255

Etant donné qu'en binaire, le codage de 128 et de -128 est le même, soit 10000000; si ce code est affiché par une fonction où tu lui dis "je te donne un nombre non-signé" ta fonction affichera 128. Si tu lui dis "je te donne un nombre signé", elle affichera -128. Même remarque pour toute valeur allant de 128 à 255; tu auras à l'écran leur homologue négatif allant de -128 à -1...
 
Si tu veux savoir la raison de ce codage si bizarre, c'est pour que l'addition de deux nombres opposés fasse toujours 0
-128    =  1000 0000
 128     =  1000 0000
Somme = 1 0000 0000 mais comme un char ne fait que 8 bits, tu perds le premier "1" par dépassement et tu te retrouves avec 0000 0000 soit 0
 
PS: Comment connaître le codage binaire d'un négatif: tu prends le nb positif, tu le codes en binaire, tu inverse chaque 0 et chaque 1 et tu rajoutes 1 au résultat
128 = 1000 0000
inv =  0111 1111
inv + 1 = 1000 0000 = -128


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1375213
skelter
Posté le 25-05-2006 à 23:26:46  profilanswer
 

Citation :

Parce que ton "char" est signé par défaut.


 
attention, le fait que char soit signé ou non n'est pas fixé par le standard, c'est dependant de l'implementation

n°1375229
Emmanuel D​elahaye
C is a sharp tool
Posté le 25-05-2006 à 23:34:30  profilanswer
 

skelter a écrit :

Citation :

Parce que ton "char" est signé par défaut.


 
attention, le fait que char soit signé ou non n'est pas fixé par le standard, c'est dependant de l'implementation


D'où le ton "char"... Mais c'était peut être involontaire. La piqûre de rappel n'était pas inutile...

Message cité 1 fois
Message édité par Emmanuel Delahaye le 25-05-2006 à 23:36:09

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1375230
Sve@r
Posté le 25-05-2006 à 23:35:02  profilanswer
 

skelter a écrit :

Citation :

Parce que ton "char" est signé par défaut.


 
attention, le fait que char soit signé ou non n'est pas fixé par le standard, c'est dependant de l'implementation


 
Euh oui. Ce que j'ai voulu dire, c'est "dans ce cas, apparemment, les char sont considérés signés"
J'ai utilisé un raccourci syntaxique qui peut prêter à confusion - Merci d'avoir rectifié... :jap:


Message édité par Sve@r le 25-05-2006 à 23:35:22

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1375243
skelter
Posté le 25-05-2006 à 23:43:35  profilanswer
 

désolé j'avais pas percutter pour le "ton" :), enfin maintenant c'est dit et c'est pas plus mal de le preciser

n°1375259
Sve@r
Posté le 26-05-2006 à 00:08:27  profilanswer
 

Emmanuel Delahaye a écrit :

D'où le ton "char"... Mais c'était peut être involontaire.


Oui, j'ai tout à fait involontairement dit un truc correctement parfait  :bounce:  


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1375301
subtil
Posté le 26-05-2006 à 01:42:47  profilanswer
 

Pourquoi tu n'utilises pas un langage de plus haut niveau?
c'est juste pour tester les algorithmes, a la limite tu t'en fous un peu des performances.
C'est dommage de 'perdre' autant de temps sur les bases du C alors que ce n'est pas vraiment le sujet de ton TIPE.
Si plus tard tu veux faire du C, il te suffit d'integrer une école d'info, voir même dans les généralistes ya des cours de C :p

n°1375324
Joel F
Real men use unique_ptr
Posté le 26-05-2006 à 08:33:24  profilanswer
 

subtil a écrit :

voir même dans les généralistes ya des cours de C :p


Faut voir la geule des cours aussi  :whistle:

n°1375964
Arry
Posté le 27-05-2006 à 13:28:46  profilanswer
 

subtil a écrit :

Pourquoi tu n'utilises pas un langage de plus haut niveau?
c'est juste pour tester les algorithmes, a la limite tu t'en fous un peu des performances.
C'est dommage de 'perdre' autant de temps sur les bases du C alors que ce n'est pas vraiment le sujet de ton TIPE.
Si plus tard tu veux faire du C, il te suffit d'integrer une école d'info, voir même dans les généralistes ya des cours de C :p


 
Je suis en prépa intégré dans une école d'électronique... En fait mon TIPE devait porté sur la compression en hardware... mais mon prof nous a soulé pour qu'on fasse sur le software, avec à l'appuie un programme codé en C... en clair j'ai rien choisi. En plus c'est pas avec les 2h d'info par ans que je vais apprendre qqch dans cette école :D

n°1375970
Je@nb
Kindly give dime
Posté le 27-05-2006 à 13:46:35  profilanswer
 

Si tu fais du hardware tu peux pas le faire en ASM ? :D

n°1375994
Arry
Posté le 27-05-2006 à 16:01:45  profilanswer
 

Arry a écrit :

mais mon prof nous a soulé pour qu'on fasse sur le software, avec à l'appuie un programme codé en C


 

Je@nb a écrit :

Si tu fais du hardware tu peux pas le faire en ASM ? :D


 
 :cry:  :pt1cable:  :hello:  
 

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
Automatiser la copie d'un fichier vers un autre fichierQuel type de Fichier pour fichier avec clé(index)
Petite question sur les tris de tableauMySQL : fichier MYI corrompu
[Vb.Net] Charger fichier 3ds dans une form...??génération de fichier XML à partir d'une base de données SQL ??
charger une image dans un tableau videImport Fichier Excel dans Sql Server
Copier une cellule en conservant toute la mise en formeBATCH DOS :Comment passer les paramètres à partir d'un fichier ?
Plus de sujets relatifs à : [C] Copier un fichier octet par octet dans un tableau


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR