lecture fichier byte par byte

Le
paolo_3
bonjou rj'utilise codeblook .pour programmerje suis debutant

j'ai trouver ce code sur internet ,ok il marche mai sj'aimerai pas
qu il charge en char mais en dec .
j'aimerai lire le fichier et le coder si en veu , exemple charge la
valeur 10 et par exemple j'ajoute +1 et sauve 11je fais une
manipulation du dec et le sauve coder si en veu ..

#include <fstream>
int main()
{
using std::ifstream;
using std::ofstream;
ifstream ifs("c:\out2.txt", std::ios::binary);
ofstream ofs("c:\sortie.txt", std::ios::binary);
//
// on lit et on écrit un octet à la fois, mais c'est très rapide
car les flux standard
// en entrée et en sortie procèdent à des accès optimisés au m=
édia
sous-jacent (accès
// en bloc et une antémémoire pour les données disponibles).
//

char c;



while (ifs.get(c))
printf("resultat = %c",c);
ofs.put(c);
}


merci
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Marc Boyer
Le #23739451
Le 08-09-2011, paolo_3
bonjou rj'utilise codeblook ....pour programmer...je suis debutant...

j'ai trouver ce code sur internet ,ok il marche mai sj'aimerai pas
qu il charge en char mais en dec .



Je crois surtout que tu ne comprend pas une notion fondamentale
du C (et par assimilation du C++): le type char est un type entier.

Je peux écrire
char c = 97;
c'est tout à fait légal. De même que
char c = 'a';
et d'ailleurs, sur de nombreux systèmes, ces deux codes sont strictement
équivalents.

La différence entre flux texte et binaire est principalement (seulement ?)
sur l'interprétation des retours à la ligne.


j'aimerai lire le fichier et le coder si en veu , exemple charge la
valeur 10 et par exemple j'ajoute +1 et sauve 11...je fais une
manipulation du dec et le sauve coder si en veu ..

#include <fstream>
int main()
{
using std::ifstream;
using std::ofstream;
ifstream ifs("c:\out2.txt", std::ios::binary);
ofstream ofs("c:\sortie.txt", std::ios::binary);

char c;

while (ifs.get(c))
printf("resultat = %cn",c);


Tant qu'à débuter en C++, autant prendre les bonnes habitudes:
std::cout<<"resultat ="<<c<<std::endl;

ofs.put(c);
}



Marc Boyer
--
À mesure que les inégalités regressent, les attentes se renforcent.
François Dubet
Pascal J. Bourguignon
Le #23740061
paolo_3
bonjou rj'utilise codeblook ....pour programmer...je suis debutant...

j'ai trouver ce code sur internet ,ok il marche mai sj'aimerai pas
qu il charge en char mais en dec .
j'aimerai lire le fichier et le coder si en veu , exemple charge la
valeur 10 et par exemple j'ajoute +1 et sauve 11...je fais une
manipulation du dec et le sauve coder si en veu ..



Si je comprends bien ce que tu veux dire, le fichier contient des
caractères qui sont une représentation décimale d'un nombre entier.

Quelque chose comme:

----(out2.txt)------------------------------------------
10
--------------------------------------------------------

On peut facilement lire des fichiers structurés ainsi en C++, à
condition de ne pas les traiter comme fichiers binaires, et de
de lire un int au lieu de lire un char:


#include <fstream>
int main()
{
using std::ifstream;
using std::ofstream;
ifstream ifs("c:\out2.txt");
ofstream ofs("c:\sortie.txt");

int input;
while(!ifs.eof()){
ifs>>input;
std::cout<<"Valeur lue: "<<input<<std::endl;
ofs<<(input+1)<<std::endl;
}
}

Voir:
http://www.cplusplus.com/reference/iostream/istream/operator%3E%3E/

--
__Pascal Bourguignon__ http://www.informatimago.com/
A bad day in () is better than a good day in {}.
paolo_3
Le #23741131
On Sep 8, 3:53 pm, "Pascal J. Bourguignon" wrote:
paolo_3 > bonjou rj'utilise codeblook ....pour programmer...je suis debutant...

> j'ai trouver  ce code sur internet  ,ok il marche  mai sj'aimerai pas
> qu il charge en char mais en dec .
> j'aimerai lire le fichier et  le coder si en veu , exemple charge   la
> valeur 10  et par exemple j'ajoute +1 et sauve 11...je fais une
> manipulation du dec et le sauve coder si en veu ..

Si je comprends bien ce que tu veux dire, le fichier contient des
caractères qui sont une représentation décimale d'un nombre entier.

Quelque chose comme:

----(out2.txt)------------------------------------------
10
--------------------------------------------------------

On peut facilement lire des fichiers structurés ainsi en C++, à
condition de ne pas les traiter comme fichiers binaires, et de
de lire un int au lieu de lire un char:

#include <fstream>
int main()
{
   using std::ifstream;
   using std::ofstream;
   ifstream ifs("c:\out2.txt");
   ofstream ofs("c:\sortie.txt");

   int input;
   while(!ifs.eof()){
     ifs>>input;
     std::cout<<"Valeur lue: "<<input<<std::endl;
     ofs<<(input+1)<<std::endl;
   }

}

Voir:http://www.cplusplus.com/reference/iostream/istream/operator%3E%3E/

--
__Pascal Bourguignon__                    http://www. informatimago.com/
A bad day in () is better than a good day in {}.



alors peu etre mal exprimer
donc lire le fichier pas ce qu'il y a l'interieur mais le fichier
comme il est fais j'ai mis out.txt mais ca peu etre out.exe si vous
voulez...
j'essaie de faire un prog qui prend un fichier quelquonque et et
ajoujte par exemple +10 , j'ai mis en decimale pour faire plus le
calcul mai ssera suremeent en hex
45fe7a2df53780e etc
donc si en veu le 45 en hex je lui ajoute 10 et etc...
voila escuse moi
Pascal J. Bourguignon
Le #23741201
paolo_3
On Sep 8, 3:53 pm, "Pascal J. Bourguignon" wrote:
paolo_3 > bonjou rj'utilise codeblook ....pour programmer...je suis debutant...

> j'ai trouver  ce code sur internet  ,ok il marche  mai sj'aimerai pas
> qu il charge en char mais en dec .
> j'aimerai lire le fichier et  le coder si en veu , exemple charge   la
> valeur 10  et par exemple j'ajoute +1 et sauve 11...je fais une
> manipulation du dec et le sauve coder si en veu ..



alors peu etre mal exprimer
donc lire le fichier pas ce qu'il y a l'interieur mais le fichier
comme il est fais j'ai mis out.txt mais ca peu etre out.exe si vous
voulez...
j'essaie de faire un prog qui prend un fichier quelquonque et et
ajoujte par exemple +10 , j'ai mis en decimale pour faire plus le
calcul mai ssera suremeent en hex
45fe7a2df53780e etc
donc si en veu le 45 en hex je lui ajoute 10 et etc...
voila escuse moi



Dans ce cas, oui, tu es sur la bonne voie:


#include <fstream>
int main()
{
using std::ifstream;
using std::ofstream;
ifstream ifs("c:\out2.txt", std::ios::binary);
ofstream ofs("c:\sortie.txt", std::ios::binary);
char c;
while(ifs.get(c)){
printf("resultat = %cn",c);
ofs.put(c+10);
}
}


--
__Pascal Bourguignon__ http://www.informatimago.com/
A bad day in () is better than a good day in {}.
paolo_3
Le #23741191
On Sep 8, 10:20 pm, "Pascal J. Bourguignon" wrote:
paolo_3 > On Sep 8, 3:53 pm, "Pascal J. Bourguignon" > wrote:
>> paolo_3 >> > bonjou rj'utilise codeblook ....pour programmer...je suis debutant.. .

>> > j'ai trouver ce code sur internet ,ok il marche mai sj'aimerai pas
>> > qu il charge en char mais en dec .
>> > j'aimerai lire le fichier et le coder si en veu , exemple charge la
>> > valeur 10 et par exemple j'ajoute +1 et sauve 11...je fais une
>> > manipulation du dec et le sauve coder si en veu ..

> alors peu etre mal exprimer
> donc lire le fichier pas ce qu'il y a l'interieur mais le fichier
> comme il est fais j'ai mis out.txt mais ca peu etre out.exe si vous
> voulez...
> j'essaie de faire un prog qui prend un fichier quelquonque et  et
> ajoujte par exemple +10    , j'ai mis en decimale pour faire plus l e
> calcul mai ssera suremeent en hex
>  45fe7a2df53780e etc
> donc si en veu le 45 en hex je lui ajoute 10 et  etc...
> voila escuse moi

Dans ce cas, oui, tu es sur la bonne voie:

#include <fstream>
int main()
{
   using std::ifstream;
   using std::ofstream;
   ifstream ifs("c:\out2.txt",  std::ios::binary);
   ofstream ofs("c:\sortie.txt", std::ios::binary);
   char c;
   while(ifs.get(c)){
      printf("resultat = %cn",c);
      ofs.put(c+10);
   }

}

--
__Pascal Bourguignon__                    http://www. informatimago.com/
A bad day in () is better than a good day in {}.- Hide quoted text -

- Show quoted text -



ok mais char c a la value rje veu lui ajouter +10
c=int(c+10) ;
ne marche pas
Marc Boyer
Le #23742011
Le 08-09-2011, paolo_3
On Sep 8, 3:53 pm, "Pascal J. Bourguignon" alors peu etre mal exprimer



Oui, il manque des mots dans tes phrases, cela n'aide pas à comprendre.

j'essaie de faire un prog qui prend un fichier quelquonque et et
ajoujte par exemple +10 , j'ai mis en decimale pour faire plus le
calcul mai ssera suremeent en hex
45fe7a2df53780e etc
donc si en veu le 45 en hex je lui ajoute 10 et etc...



Tu semble avoir du mal à comprendre que les notions décimales,
hexa, binaires, n'existent pas vraiment dans un fichier. Un fichier
n'est qu'une suite de char.
Ensuite, c'est une question d'interprétation de savoir si ces
chars représentent un texte français, des valeurs décimales,
etc.

Si je prends un éditeur de texte (gedit,notepad,emacs) et que
je tape dedans avec mon clavier la suite 'abcd', et que je
spécifie un encodage latin1, c'est question d'interprétation de
savoir si ces 4 octets représentent:
- un petit mot 'abcd'
- une valeur hexadécimale (43981 en décimal)
- une suite de valeurs 8 bits (65 66 67 68)
- un entier 64 bits (75364 si je me suis pas planté)
- deux mots de 16 bits
- etc (et on a pas parlé signe/non signé, flottant, utf8...)

Et si je fait un +10 à chaque char, je vais avoir dans
le fichier de sortie 'jklm' auquel je pourrais donner
différentes interprétations.

Marc Boyer
--
À mesure que les inégalités regressent, les attentes se renforcent.
François Dubet
paolo_3
Le #23744401
On Sep 9, 11:07 am, Marc Boyer wrote:
Le 08-09-2011, paolo_3
> On Sep 8, 3:53 pm, "Pascal J. Bourguignon" > alors peu etre mal exprimer

  Oui, il manque des mots dans tes phrases, cela n'aide pas à compren dre.

> j'essaie de faire un prog qui prend un fichier quelquonque et  et
> ajoujte par exemple +10    , j'ai mis en decimale pour faire plus l e
> calcul mai ssera suremeent en hex
>  45fe7a2df53780e etc
> donc si en veu le 45 en hex je lui ajoute 10 et  etc...

   Tu semble avoir du mal à comprendre que les notions décimales,
hexa, binaires, n'existent pas vraiment dans un fichier. Un fichier
n'est qu'une suite de char.
   Ensuite, c'est une question d'interprétation de savoir si ces
chars représentent un texte français, des valeurs décimales,
etc.

  Si je prends un éditeur de texte (gedit,notepad,emacs) et que
je tape dedans avec mon clavier la suite 'abcd', et que je
spécifie un encodage latin1, c'est question d'interprétation de
savoir si ces 4 octets représentent:
 - un petit mot 'abcd'
 - une valeur hexadécimale (43981 en décimal)
 - une suite de valeurs 8 bits (65 66 67 68)
 - un entier 64 bits (75364 si je me suis pas planté)
 - deux mots de 16 bits
 - etc (et on a pas parlé signe/non signé, flottant, utf8...)

  Et si je fait un +10 à chaque char, je vais avoir dans
le fichier de sortie 'jklm' auquel je pourrais donner
différentes interprétations.

Marc Boyer
--
À mesure que les inégalités regressent, les attentes se renforcent.
                                                        François Dubet



j'aimerai prendre un un fichier out.dat
et le lire byte par byte et le coder
donc lis le fichier , et l'enregistre a la valeur oposee lue
si lis 1 sauve 255
si lit 50 sauve 206 etc jusqua la fin du fichier
out.dat a out.cod
voila ce que je sui sen train de faire
sauve le fichier au contraire de ce qui a lu
merci
Pascal J. Bourguignon
Le #23744391
paolo_3
j'aimerai prendre un un fichier out.dat
et le lire byte par byte



Jusque là, ça se comprend. On aimerait mieux que tu restes avec le
français et utilises le mot "octet" au lieu du mot anglais "byte", mais
à par ça, ça va.

et le coder



Là, on ne comprend plus. Qu'est ce que ça veut dire pour toi de "coder
un fichier"?


donc lis le fichier,



Moi, je ne fais rien. Qui lit le fichier?

et l'enregistre a la valeur oposee lue



De quoi parles tu? Qu'est ce que "enregistre un fichier à la valeur
opposée lue" signifie?


si lis 1 sauve 255
si lit 50 sauve 206 etc jusqua la fin du fichier
out.dat a out.cod



Quel rapport y a-t'il entre la correspondance :

1 --> 255
50 --> 206

et l'expression c+10 dont tu nous parlais dans les messages précédents?


sauve le fichier au contraire de ce qui a lu



Si tu veux calculer le complément-à-deux des octets lus, pourquoi ne le
fais tu pas?


unsigned char octet;
unsigned char complement_2;

...
ifs.get(octet);
complement_2=((~octet)+1);
ofs.put(complement_2);
...

--
__Pascal Bourguignon__ http://www.informatimago.com/
A bad day in () is better than a good day in {}.
paolo_3
Le #23747361
On Sep 9, 11:13 pm, "Pascal J. Bourguignon" wrote:
paolo_3 > j'aimerai prendre un un fichier  out.dat
> et le lire byte par byte

Jusque là, ça se comprend.  On aimerait mieux que tu restes avec le
français et utilises le mot "octet" au lieu du mot anglais "byte", mais
à par ça, ça va.

> et le coder

Là, on ne comprend plus.  Qu'est ce que ça veut dire pour toi de "c oder
un fichier"?

> donc lis le fichier,

Moi, je ne fais rien.  Qui lit le fichier?

> et l'enregistre a la valeur oposee lue

De quoi parles tu?  Qu'est ce que "enregistre un fichier à la valeur
opposée lue" signifie?

> si lis  1 sauve 255
> si lit 50 sauve 206 etc jusqua la fin du fichier
> out.dat a out.cod

Quel rapport y a-t'il entre la correspondance :

    1 --> 255
   50 --> 206

et l'expression c+10 dont tu nous parlais dans les messages précédent s?

> sauve le fichier au contraire de ce qui a lu

Si tu veux calculer le complément-à-deux des octets lus, pourquoi ne le
fais tu pas?

   unsigned char octet;
   unsigned char complement_2;

   ...
       ifs.get(octet);  
       complement_2=((~octet)+1);
       ofs.put(complement_2);
   ...

--
__Pascal Bourguignon__                    http://www. informatimago.com/
A bad day in () is better than a good day in {}.



ok j'ai du mal a me exprimer je crois

je prend un fichier quelconque si en le lit avec un editeur hexa en
as :

31372f31302f32303038202d206d495

j'aimerai qu'il prenne le 31 et me fasse l'inverse de la valuer lue
ce qui donnerais :

cfc9d1 etc....

et devrais sauver ca dans un fichier en binaire pas dans le fichier
comme text ...c'es t cequ'il fais la ..
je sais pas si je dois changer le std::io:binary en std::io:out .. ?

voila le prog modifer :

#include <fstream>
#include <iostream>
int main()
{
using std::ifstream;
using std::ofstream;
ifstream ifs("in.txt", std::ios::binary);
ofstream ofs("Out.txt", std::ios::binary);
//
// on lit et on écrit un octet à la fois, mais c'est très rapide
car les flux standard
// en entrée et en sortie procèdent à des accès optimisés au m édia
sous-jacent (accès
// en bloc et une antémémoire pour les données disponibles).
//
char c;
if (c=="31") {c="cf";}
while (ifs.get(c))
ofs.put(c);
}

la me dit erreur

error: invalid conversion from 'const char*' to 'char'|

voila merci encore de votre patience
Olivier Miakinen
Le #23747591
Bonjour, je fais court.

Le 10/09/2011 21:12, paolo_3 a écrit :

if (c=="31") {c="cf";}



if (c == 0x31) { c = 0xcf; }

la me dit erreur

error: invalid conversion from 'const char*' to 'char'|



Normal : c contient l'octet 0x31, c'est-à-dire le caractère '1', et
tu essayes d'y mettre un pointeur qui pointe vers la chaîne de trois
caractères 'c', 'f' et '', soit les octets 0x63, 0x66 et 0x00.

Tu essayes donc de convertir un 'const char*' (un pointeur vers une
chaîne de caractères constante) en un 'char' (un caractère).

Cordialement,
--
Olivier Miakinen
Publicité
Poster une réponse
Anonyme