Re: Devoir de vacances : déchiffra ge de Streams
Philippe Laval <[email protected]>
| Newsgroups | gmane.comp.lang.ada.france |
|---|---|
| Organization | CNRS |
| Message-ID | <[email protected]> |
Jeffrey Carter a écrit : > Philippe Laval wrote: > >> >> J'essaie de lire un vieux fichier enregistré au format HP-LIF avec >> une machine depuis longtemps mise au rebut. Avec un éditeur hexa, on >> voit qu'après un en-tête facile à enlever le reste du fichier est >> composé de lignes de caractères précédées de 2 bytes : l'un est 00 >> hexa et l'autre est le nombre de caractères de la ligne, en hexa. Par >> exemple 00,13,suivi de 19 caractères, 00,19 et 25 caractères, etc. >> En lisant le fichier comme un Stream, avec Character'Read j'arrive à >> me positionner sur chaque 00 (ASCII.Nul), re-faire un Character'Read >> et lire ensuite chaque caractère jusqu'au 00 suivant. Mais je ne >> parviens pas à lire à lire le nombre hexa qui suit le 00 (à moins que >> ce 00 ne fasse partie du nombre, qui serait alors un entier sur 16 >> bits). >> Ni 'Pos() de ce qui a été lu avec Character'Read, ni Integer'Read, ni >> Short_Integer'Read, ni Short_Short_Integer'Read, ni aucune autre >> combinaison exotique que j'ai essayé ne me donnent la valeur de ce >> nombre. > > > Est-ce que ce marche: > > type Byte is mod 2 ** 8 > > Byte'Read > > ? Non. Auparavant j'avais essayé, sans succès, ceci, inspiré du cours de D. Feneuille : function Char_To_Byte is new Unchecked_Conversion (Character, Byte); Character'Read (C); Length := Char_To_Byte (C); > > Si non, est-ce que ce marche: > > package Byte_IO is new Ada.Sequential_IO (Byte); > > Byte_IO.Read (File, Dummy); -- 00 > Byte_IO.Read (File, Length); > > Get_String : for I in 1 .. Length loop > Byte_IO.Read (File, Value); > Char := Character'Val (Value); > -- Faire quelque chose avec Char > end loop Get_String; > > ? > Le problème c'est Comment convertir la valeur de Length en entier pour servir de borne supérieure à la boucle Get_String ? Avec Integer (Length), ou Byte'Val (Length), on ne trouve pas la bonne valeur : la première ligne du fichier à lire contient 66 caractères, or on trouve Length = 114, ce qui n'est pas la bonne valeur ni en octal (on devrait trouver dans ce cas trouver 102), ni en hexadécimal (42). Note pour Jean-Pierre Parsy : je n'avais pas envoyé de fichier attaché... Ce que tu as converti (smime.p7s) est sans doute un "footer" ajouté par je ne sais pas quoi. En tout cas merci pour le programme Java, je vais étudier ça de près ; cependant à première vue j'ai peur qu'il ne réponde pas à ma question (je ne cherche pas à traduire le fichier en hexadécimal). -- Philippe Laval Observatoire océanologique Villefranche-sur-Mer Email: [email protected] _______________________________________________ Site WWW de l'association Ada-France: http://www.ada-france.org/ [email protected] http://www.ada-france.org/mailman/listinfo/ada-france
smime.p7s
(application/x-pkcs7-signature, 3.5 KB) - not displayed