Re: Devoir de vacances : déchiffra ge de Streams
Stephane Riviere <[email protected]>
| Newsgroups | gmane.comp.lang.ada.france |
|---|---|
| Organization | Rochebrune |
| Message-ID | <[email protected]> |
Bon, j'ai créé un hp_lif.bin bidon de la forme suivante, qui doit
correspondre plus ou moins à ton format, long de 87 octets :
HP-LIF HEADER----------------
<00><06>123456
<00><03>123
<00><0A>123456789A
<00><07>1234567
<00><0f>123456789ABCDEF
<00><05>12345
En utilisant le programme hp_lif.adb suivant :
-------------------------------------------------------------------------------
with Ada.Text_IO ; use Ada.Text_IO;
with Ada.Sequential_IO;
procedure Hp_Lif is
type Byte is mod 256 ;
package File_Byte_IO is new Ada.Sequential_IO(Byte);
function byte2string (B : Byte) return string is
S : constant string := Byte'Image(B);
begin
if S'length = 2 then
return "00" & S(2..S'last);
elsif S'length = 3 then
return "0" & S(2..S'last);
else
return S(2..S'last);
end if;
end byte2string;
File_Handle : File_Byte_IO.File_Type;
File_Byte : Byte ;
begin
File_Byte_IO.Open(File_Handle , File_Byte_IO.In_File, "Hp_Lif.bin");
while not File_Byte_IO.End_Of_File(File_Handle) loop
File_Byte_IO.Read(File_Handle, File_Byte);
put("Octet : " & byte2string(File_Byte));
if File_Byte = 0 then
Put_line(" : Separateur");
elsif File_Byte < 32 then
Put_line(" : Longueur");
else
Put_line(" : Caractere : " & Character'Val(File_Byte ));
end if;
end loop;
File_Byte_IO.Close(File_Handle);
end Hp_Lif;
-------------------------------------------------------------------------------
J'obtient :
Octet : 072 : Caractere : H
Octet : 080 : Caractere : P
Octet : 045 : Caractere : -
Octet : 076 : Caractere : L
Octet : 073 : Caractere : I
Octet : 070 : Caractere : F
Octet : 032 : Caractere :
Octet : 072 : Caractere : H
Octet : 069 : Caractere : E
Octet : 065 : Caractere : A
Octet : 068 : Caractere : D
Octet : 069 : Caractere : E
Octet : 082 : Caractere : R
Octet : 045 : Caractere : -
Octet : 045 : Caractere : -
Octet : 045 : Caractere : -
Octet : 045 : Caractere : -
Octet : 045 : Caractere : -
Octet : 045 : Caractere : -
Octet : 045 : Caractere : -
Octet : 045 : Caractere : -
Octet : 045 : Caractere : -
Octet : 045 : Caractere : -
Octet : 045 : Caractere : -
Octet : 045 : Caractere : -
Octet : 045 : Caractere : -
Octet : 045 : Caractere : -
Octet : 045 : Caractere : -
Octet : 045 : Caractere : -
Octet : 000 : Separateur
Octet : 006 : Longueur
Octet : 049 : Caractere : 1
Octet : 050 : Caractere : 2
Octet : 051 : Caractere : 3
Octet : 052 : Caractere : 4
Octet : 053 : Caractere : 5
Octet : 054 : Caractere : 6
Octet : 000 : Separateur
Octet : 003 : Longueur
Octet : 049 : Caractere : 1
Octet : 050 : Caractere : 2
Octet : 051 : Caractere : 3
Octet : 000 : Separateur
Octet : 010 : Longueur
Octet : 049 : Caractere : 1
Octet : 050 : Caractere : 2
Octet : 051 : Caractere : 3
Octet : 052 : Caractere : 4
Octet : 053 : Caractere : 5
Octet : 054 : Caractere : 6
Octet : 055 : Caractere : 7
Octet : 056 : Caractere : 8
Octet : 057 : Caractere : 9
Octet : 065 : Caractere : A
Octet : 000 : Separateur
Octet : 007 : Longueur
Octet : 049 : Caractere : 1
Octet : 050 : Caractere : 2
Octet : 051 : Caractere : 3
Octet : 052 : Caractere : 4
Octet : 053 : Caractere : 5
Octet : 054 : Caractere : 6
Octet : 055 : Caractere : 7
Octet : 000 : Separateur
Octet : 015 : Longueur
Octet : 049 : Caractere : 1
Octet : 050 : Caractere : 2
Octet : 051 : Caractere : 3
Octet : 052 : Caractere : 4
Octet : 053 : Caractere : 5
Octet : 054 : Caractere : 6
Octet : 055 : Caractere : 7
Octet : 056 : Caractere : 8
Octet : 057 : Caractere : 9
Octet : 065 : Caractere : A
Octet : 066 : Caractere : B
Octet : 067 : Caractere : C
Octet : 068 : Caractere : D
Octet : 069 : Caractere : E
Octet : 070 : Caractere : F
Octet : 000 : Separateur
Octet : 005 : Longueur
Octet : 049 : Caractere : 1
Octet : 050 : Caractere : 2
Octet : 051 : Caractere : 3
Octet : 052 : Caractere : 4
Octet : 053 : Caractere : 5
Donc, ça roule, c'est pas plus long qu'en C, on lit octet par octet et
on a bien la longueur... J'ai pas ton code, mais il est possible que tu
aies un problême autour du type utilisé dans ton stream...
--
Stephane Riviere
Oleron Island - France
http://stephane.rochebrune.org
OpenPgp Key <5fd6a1e6> available on the web site above
_______________________________________________
Site WWW de l'association Ada-France: http://www.ada-france.org/
[email protected]
http://www.ada-france.org/mailman/listinfo/ada-france
hp_lif.bin
(application/octet-stream, 87 B) - not displayed