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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.