Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

lecture fichier byte par byte

16 réponses
Avatar
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 ..

#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 =E9crit un octet =E0 la fois, mais c'est tr=E8s rapide
car les flux standard
// en entr=E9e et en sortie proc=E8dent =E0 des acc=E8s optimis=E9s au m=
=E9dia
sous-jacent (acc=E8s
// en bloc et une ant=E9m=E9moire pour les donn=E9es disponibles).
//

char c;



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


merci

10 réponses

1 2
Avatar
Marc Boyer
Le 08-09-2011, paolo_3 a écrit :
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
Avatar
Pascal J. Bourguignon
paolo_3 writes:

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 {}.
Avatar
paolo_3
On Sep 8, 3:53 pm, "Pascal J. Bourguignon"
wrote:
paolo_3 writes:
> 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
Avatar
Pascal J. Bourguignon
paolo_3 writes:

On Sep 8, 3:53 pm, "Pascal J. Bourguignon"
wrote:
paolo_3 writes:
> 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 {}.
Avatar
paolo_3
On Sep 8, 10:20 pm, "Pascal J. Bourguignon"
wrote:
paolo_3 writes:
> On Sep 8, 3:53 pm, "Pascal J. Bourguignon"
> wrote:
>> paolo_3 writes:
>> > 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
Avatar
Marc Boyer
Le 08-09-2011, paolo_3 a écrit :
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
Avatar
paolo_3
On Sep 9, 11:07 am, Marc Boyer
wrote:
Le 08-09-2011, paolo_3 a écrit :

> 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
Avatar
Pascal J. Bourguignon
paolo_3 writes:

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 {}.
Avatar
paolo_3
On Sep 9, 11:13 pm, "Pascal J. Bourguignon"
wrote:
paolo_3 writes:
> 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
Avatar
Olivier Miakinen
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
1 2