 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Dany Guest
|
Posted: Fri Jul 18, 2003 10:30 am Post subject: lecture d'un fichier Hexa |
|
|
Bonjour
J'ai un fichier encodé en Hexadecimale et je voudrais pour voir le lire,
normalement c'est à dire:
Quand j'ouvre mon fichier hexadecimle avec un fopen tout bete il s'ouvre
comme sous notepas (avec des caractere bizare). Je veux pouvoir l'ouvrire
comme un interpreteur Hexadecimele (avec les valeur Hexa ex: "FF11A2").
Voila merci d'avance
Dany
|
|
| Back to top |
|
 |
Christophe Lephay Guest
|
Posted: Fri Jul 18, 2003 11:40 am Post subject: Re: lecture d'un fichier Hexa |
|
|
"Dany" <dany_tambicannou (AT) yahoo (DOT) fr> a écrit dans le message de
news:bf8i6a$4b6$1 (AT) news-reader1 (DOT) wanadoo.fr...
| Quote: | Bonjour
J'ai un fichier encodé en Hexadecimale et je voudrais pour voir le lire,
normalement c'est à dire:
Quand j'ouvre mon fichier hexadecimle avec un fopen tout bete il s'ouvre
comme sous notepas (avec des caractere bizare). Je veux pouvoir l'ouvrire
comme un interpreteur Hexadecimele (avec les valeur Hexa ex: "FF11A2").
Voila merci d'avance
|
Si je comprends bien tu as ouvert le fichier en mode texte au lieu de
l'ouvrir en mode binaire...
Chris
|
|
| Back to top |
|
 |
Benoit Dejean Guest
|
Posted: Fri Jul 18, 2003 12:27 pm Post subject: Re: lecture d'un fichier Hexa |
|
|
Le Fri, 18 Jul 2003 13:16:32 +0200, lecyborg a écrit :
| Quote: | morceau de lexemple de la fct itoa de msdn, je pense que ca repondra a
ta questio:
Example
/* ITOA.C: This program converts integers of various
* sizes to strings in various radixes. */
#include
#include
_itoa(
|
[...]
c'est du C et non standard. très mauvaise blague
--
"Ne perdez pas de vue qu'un programme rapide
et incorrect est d'une utilité presque nulle."
Ce qui est loin d'être incompatible avec la notion d'Art.
|
|
| Back to top |
|
 |
Benoit Dejean Guest
|
Posted: Fri Jul 18, 2003 12:34 pm Post subject: Re: lecture d'un fichier Hexa |
|
|
Le Fri, 18 Jul 2003 13:40:31 +0200, Christophe Lephay a écrit :
| Quote: | "Dany" <dany_tambicannou (AT) yahoo (DOT) fr> a écrit dans le message de
news:bf8i6a$4b6$1 (AT) news-reader1 (DOT) wanadoo.fr...
Bonjour
J'ai un fichier encodé en Hexadecimale et je voudrais pour voir le
lire, normalement c'est à dire:
Quand j'ouvre mon fichier hexadecimle avec un fopen tout bete il
s'ouvre comme sous notepas (avec des caractere bizare). Je veux pouvoir
l'ouvrire comme un interpreteur Hexadecimele (avec les valeur Hexa ex:
"FF11A2"). Voila merci d'avance
Si je comprends bien tu as ouvert le fichier en mode texte au lieu de
l'ouvrir en mode binaire...
|
ifstream ifs("fichier.binaire", ios_base::in | ios_base::binary)
pour une lecture binaire
et après il me semble que c'est ça que tu recherche
#include <iostream>
using namespace std;
int main()
{
cout << hex << 0xdeadbeef << endl
<< dec << 123456789 << endl
<< hex << 123456789 << endl;
}
--
"Ne perdez pas de vue qu'un programme rapide
et incorrect est d'une utilité presque nulle."
Ce qui est loin d'être incompatible avec la notion d'Art.
|
|
| Back to top |
|
 |
Dany Guest
|
Posted: Fri Jul 18, 2003 1:35 pm Post subject: Re: lecture d'un fichier Hexa |
|
|
Salut
ios::binary ne transforme pas mes donnees en binaire elle reste telle quelle
cad en hexa.
Par contre je l'ai deja tester toute seul ça marchais.
Mais la j'ai une serie de 230400 valeurs à ecrire dans le fichier texte et
ios::binary ecris que la premiere valeur alors j'avais utilisais ios::app |
ios::binary mais dans ce cas ios::binary n'a pas d'effet.
Sais tu pourkoi?
Dany
|
|
| Back to top |
|
 |
Jean-Marc Bourguet Guest
|
Posted: Fri Jul 18, 2003 2:02 pm Post subject: Re: lecture d'un fichier Hexa |
|
|
"Dany" <dany_tambicannou (AT) yahoo (DOT) fr> writes:
| Quote: | ios::binary ne transforme pas mes donnees en binaire elle reste telle quelle
cad en hexa.
|
Tu as l'air d'avoir des problemes de comprehension des concepts de base:
1/ std::binary ne joue que sur la maniere dont les lignes sont
traitees. Sous Unix ca fait rien, sous Windows ca change les CR LF en
LF et sous MacOS < MacOSX ca change les CR en LF et sous MacOSX j'en
sais rien (a priori c'est comme sous Unix mais sait on jamais).
2/ binaire ou hexa ce n'est qu'une maniere de presenter des valeurs
http://www.bourguet.org/data.html
Pour la suite, montre un exemple de code avec ce que tu optiens et ce
a quoi tu t'attends.
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
|
|
| Back to top |
|
 |
Christophe Lephay Guest
|
Posted: Fri Jul 18, 2003 2:48 pm Post subject: Re: lecture d'un fichier Hexa |
|
|
"Dany" <dany_tambicannou (AT) yahoo (DOT) fr> a écrit dans le message de
news:bf8t1k$8ii$1 (AT) news-reader3 (DOT) wanadoo.fr...
| Quote: | ios::binary ne transforme pas mes donnees en binaire elle reste telle
quelle
cad en hexa.
|
Arf, tu continues à mélanger deux choses distinctes. Il y a fondamentalement
deux types de fichiers distincts : les fichiers textes et les fichiers
binaires. Une différence essentielle, c'est l'interpretation de certains
octets (notemment le caractère EOF indiquant la fin de fichier d'un fichier
texte).
Quand tu ouvres un fichier binaire dans un éditeur de texte, tu as en
général une suite d'octets complètement incompréhensibles (certains n'étant
pas affichés, le cas échéant). Quand tu l'ouvres avec une application
adaptée, les données sont en général affichées en hexadécimal car ils
permettent une représentation avec un nombre fixe de caractères.
| Quote: | Par contre je l'ai deja tester toute seul ça marchais.
Mais la j'ai une serie de 230400 valeurs à ecrire dans le fichier texte et
ios::binary ecris que la premiere valeur alors j'avais utilisais ios::app
ios::binary mais dans ce cas ios::binary n'a pas d'effet.
|
Poste ton code...
é7 d'écrire en fran7, c + agréable à lire...
Chris
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
|
| Back to top |
|
 |
Jean-Marc Bourguet Guest
|
Posted: Sat Jul 19, 2003 2:15 pm Post subject: Re: lecture d'un fichier Hexa |
|
|
Fabien LE LEZ <gramster (AT) gramster (DOT) com> writes:
| Quote: | On Fri, 18 Jul 2003 16:48:07 +0200, "Christophe Lephay"
[email]christophe-lephay (AT) wanadoo (DOT) fr[/email]> wrote:
(notemment le caractère EOF indiquant la fin de fichier d'un
fichier texte)
C'est de l'histoire ancienne, ça, non ?
|
S'il veut parler de l'utilisation de SUB (code 26, ^Z) pour marquer la
fin des fichiers textes, c'est un vestige de CPM qui stockait les
tailles de fichiers en nombre de secteurs, ce marqueur de fin était
alors utile. La convention a été reprise par DOS mais les versions
que j'ai utilisée ont toujours permis de connaître la taille des
fichiers au byte près (peut être que c'était utile avec DOS 1...)
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
|
|
| Back to top |
|
 |
kanze@gabi-soft.fr Guest
|
Posted: Mon Jul 21, 2003 10:05 am Post subject: Re: lecture d'un fichier Hexa |
|
|
Jean-Marc Bourguet <jm (AT) bourguet (DOT) org> wrote
| Quote: | "Dany" <dany_tambicannou (AT) yahoo (DOT) fr> writes:
ios::binary ne transforme pas mes donnees en binaire elle reste
telle quelle cad en hexa.
Tu as l'air d'avoir des problemes de comprehension des concepts de
base:
1/ std::binary ne joue que sur la maniere dont les lignes sont
traitees. Sous Unix ca fait rien, sous Windows ca change les CR LF en
LF et sous MacOS < MacOSX ca change les CR en LF et sous MacOSX j'en
sais rien (a priori c'est comme sous Unix mais sait on jamais).
2/ binaire ou hexa ce n'est qu'une maniere de presenter des valeurs
http://www.bourguet.org/data.html
Pour la suite, montre un exemple de code avec ce que tu optiens et ce
a quoi tu t'attends.
|
Je crois que ce qu'il faut, c'est de revenir à une chose que tu as dit
dans ton posting avant : un fichier, c'est une suite d'octets (dans la
pratique sur des machines courantes) dont l'interprétation dépend du
programme. La bibliothèque standard fournit trois couches
d'interprétation quasiment indépendantes :
- la detection des lignes et de la fin fichier, avec deux options,
choisies par la présence ou l'absence de l'option ios::binary lors
de l'ouverture,
- la translation des codes de caractères, choisie par le locale, et
- les conversions entre les formats textuels et la représentation
interne, des les opérateurs >> et <<.
Pour lire du binaire brut, il faut s'assurer que :
- la detection des lignes est supprimée et qu'on reconnaît la fin de
fichier binaire -- c'est l'option ios::binary,
- que la transcodage soit la fonction d'identité -- c'est le cas dans
le locale "C", et
- qu'il n'y a pas de conversions de formats -- on évite donc les >> et
les <<.
En général, les deux premières interprétations se trouvent dans
std::filebuf, la dernière dans istream. Si on veut lire un fichier
entier en format interne, il n'est donc par rare de se servir du filebuf
directement.
--
James Kanze GABI Software mailto:kanze (AT) gabi-soft (DOT) fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
|
| Back to top |
|
 |
Christophe Lephay Guest
|
Posted: Mon Jul 21, 2003 6:52 pm Post subject: Re: lecture d'un fichier Hexa |
|
|
"Fabien LE LEZ" <gramster (AT) gramster (DOT) com> a écrit dans le message de
news:vbaohvg2iuu22jcl91fg2aqkkicv3lsqp5 (AT) 4ax (DOT) com...
| Quote: | On 21 Jul 2003 02:54:05 -0700, [email]kanze (AT) gabi-soft (DOT) fr[/email] wrote:
En revanche, je ne sais pas si j'utiliserais le mot « ancien », parce
que c'est toujours supporté sous les dernières versions de VC++ sous les
dernières Windows, je crois. Si tu ouvres un fichier en mode texte, et
le fichier contient un 0x1A, la lecture s'arrête là.
Y a-t-il une raison valable à cela ? La norme en parle-t-elle ?
|
Peut-être peut-on trouver des raisons dans les discussions passées (un peu
anciennes déjà) sur les possibilités ou impossibilités de connaitre
réellement la taille d'un fichier avant de l'avoir complètement lu ?
De fait, dans un système ou tout peut être considéré comme fichier, y
compris la console, il faut bien un moyen d'en indiquer la fin dans la
mesure où on ne peut pas connaitre sa taille à l'avance, me semble-t-il...
Chris
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Mon Jul 21, 2003 9:57 pm Post subject: Re: lecture d'un fichier Hexa |
|
|
On Mon, 21 Jul 2003 20:52:10 +0200, "Christophe Lephay"
<christophe-lephay (AT) wanadoo (DOT) fr> wrote:
| Quote: | Y a-t-il une raison valable à cela ? La norme en parle-t-elle ?
Peut-être peut-on trouver des raisons dans les discussions passées (un peu
anciennes déjà) sur les possibilités ou impossibilités de connaitre
réellement la taille d'un fichier avant de l'avoir complètement lu ?
|
Le langage C++ ne peut calculer la taille d'un fichier sans l'avoir
parcouru. L'OS, par contre, le peut très bien.
| Quote: | De fait, dans un système ou tout peut être considéré comme fichier, y
compris la console, il faut bien un moyen d'en indiquer la fin dans la
mesure où on ne peut pas connaitre sa taille à l'avance, me semble-t-il...
|
Même chose ici : c'est au système d'exploitation de se débrouiller
pour savoir quand le fichier se termine. Le langage n'a pas à s'en
préoccuper -- quand le programme essaie de lire des octets alors que
la fin du fichier est atteinte, le système renvoie une erreur, que le
langage se contente de répercuter vers le programme.
Tu remarqueras d'ailleurs que le EOF des système Microsoft (et
peut-être aussi Unix), qui sert à indiquer "à la main" la fin de
l'entrée sur la console, est le caractère ^Z (0x1A je suppose), tandis
que le EOF du langage est -1.
--
Tout sur fr.* (FAQ, etc.) : http://www.usenet-fr.net/fur/
et http://www.aminautes.org/forums/serveurs/tablefr.html
Archives : http://groups.google.com/advanced_group_search
http://www.usenet-fr.net/fur/usenet/repondre-sur-usenet.html
|
|
| Back to top |
|
 |
Christophe Lephay Guest
|
Posted: Mon Jul 21, 2003 10:06 pm Post subject: Re: lecture d'un fichier Hexa |
|
|
"Fabien LE LEZ" <gramster (AT) gramster (DOT) com> a écrit dans le message de
news:pvnohvs4vnuofujcs1v3i6hcp21kdha922 (AT) 4ax (DOT) com...
| Quote: | On Mon, 21 Jul 2003 20:52:10 +0200, "Christophe Lephay"
[email]christophe-lephay (AT) wanadoo (DOT) fr[/email]> wrote:
Y a-t-il une raison valable à cela ? La norme en parle-t-elle ?
Peut-être peut-on trouver des raisons dans les discussions passées (un
peu
anciennes déjà) sur les possibilités ou impossibilités de connaitre
réellement la taille d'un fichier avant de l'avoir complètement lu ?
Le langage C++ ne peut calculer la taille d'un fichier sans l'avoir
parcouru. L'OS, par contre, le peut très bien.
|
S'il en a une, et si elle est connue à l'avance (ce qui est le cas des
fichiers sur disque, bien entendu)
| Quote: | De fait, dans un système ou tout peut être considéré comme fichier, y
compris la console, il faut bien un moyen d'en indiquer la fin dans la
mesure où on ne peut pas connaitre sa taille à l'avance, me
semble-t-il...
Même chose ici : c'est au système d'exploitation de se débrouiller
pour savoir quand le fichier se termine. Le langage n'a pas à s'en
préoccuper -- quand le programme essaie de lire des octets alors que
la fin du fichier est atteinte, le système renvoie une erreur, que le
langage se contente de répercuter vers le programme.
|
Et comment en informe-t-il l'application ?
| Quote: | Tu remarqueras d'ailleurs que le EOF des système Microsoft (et
peut-être aussi Unix), qui sert à indiquer "à la main" la fin de
l'entrée sur la console, est le caractère ^Z (0x1A je suppose), tandis
que le EOF du langage est -1.
|
Au même titre que c'était '$' pour désigner une fin de chaine sur les
processeurs intel et non pas ' '. C'est juste une question de convention,
celà ne veut pas dire pour autant que c'est inutile...
Chris
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Mon Jul 21, 2003 10:46 pm Post subject: Re: lecture d'un fichier Hexa |
|
|
Prenons le code suivant :
void f (istream& is)
{
std::string ligne;
while (getline (is, ligne));
}
A chaque parcours de la boucle :
1- le programme demande au langage (plus précisément à la SL) de lire
une ligne
2- le langage demande à l'OS de lui envoyer un octet
-> si le fichier est terminé, l'OS refuse, et le langage met à 1
le bit qui va bien dans le istream, puis renvoie la main au programme
-> si le fichier n'est pas terminé, l'OS accepte ; le langage
examine cet octet, et s'il reconnaît l'octet de fin de ligne, il
renvoie la main au programme. Sinon, il revient en 2.
La détection de fin de fichier est la tâche de l'OS. Sur systèmes
"classiques" (Win/Unix), l'OS détecte la fin du fichier en comptant le
nombre d'octets lus s'il s'agit d'un vrai fichier, ou détecte la fin
du programme dans le cas d'un pipe, ou attend un "^Z" (0x1A) s'il
s'agit de la console. Le langage n'a à aucun moment la tâche de
s'occuper d'un éventuel caractère 0x1A.
--
Tout sur fr.* (FAQ, etc.) : http://www.usenet-fr.net/fur/
et http://www.aminautes.org/forums/serveurs/tablefr.html
Archives : http://groups.google.com/advanced_group_search
http://www.usenet-fr.net/fur/usenet/repondre-sur-usenet.html
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|