Bonjour,

Je dois dans mon projet encoder et decoder des fichiers encoder en UUE...
J'ai bien essayé de m'inspirer de Indy, mais le code ne fonctionne pas, il est totalement buggé...

Alors je me suis demandé si je ne pouvais pas la coder moi même (je sais je suis fou)...

Je vous explique le délire, voici des informations rapide sur UUE http://fr.wikipedia.org/wiki/Uuencode..

J'aimerai savoir si c'est possible et si vous pouviez m'aider un peu (me donner quelques pistes) pour réussir à travailler sur les bytes ainsi...



J'aimerai utiliser les Streams pour les fonctions.. A quoi faut il que je fasse attention particulièrement (optimisation de code)...

Je vous remercie d'avance,
Rémi


PS : en gros je voudrais :
à partir d'un octet (base 10) -> le convertir en (base 2) (de la manière la plus rapide possible) ...
Jouer avec les bytes obtenues pour récupérer un groupe de 6 bits...
Et récupérer la valeur décimale de ce groupe de 6 bits...

Autres questions : j'ai une source qui le fait sur un fichier mais je n'y comprend rien :

qu'est ce que les fonctions shl et shr concrétement ? (je sais lire l'aide)


pour décoder cette source utilise :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
      procedure GetNextHunk;
      var
        I: Integer;
      begin
        for I := 0 to 3 do
          Chars[I] := Byte(NextCh) - Offset;
        Hunk[0] := Byte((Chars[0] shl 2) + (Chars[1] shr 4));
        Hunk[1] := Byte((Chars[1] shl 4) + (Chars[2] shr 2));
        Hunk[2] := Byte((Chars[2] shl 6) + Chars[3]);
        ByteNum := 0
      end;
Pour encoder :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  procedure FlushHunk;
  var
    I: Integer;
  begin
    if LineLength = CharsPerLine then
      FlushLine;
    Chars[0] := Byte(Hunk[0] shr 2);
    Chars[1] := Byte((Hunk[0] shl 4) + (Hunk[1] shr 4));
    Chars[2] := Byte((Hunk[1] shl 2) + (Hunk[2] shr 6));
    Chars[3] := Byte(Hunk[2] and SixBitMask);
    for I := 0 to 3 do
    begin
      Line[LineLength] := Char((Chars[I] and SixBitMask) + Offset);
      Inc(LineLength);
    end;
    Inc(BytesInLine, NumBytes);
    NumBytes := 0
  end;
Sachant que SixBitMask vaut
SixBitMask = $3F;
Ca veut dire quoi ça ??

Merci encore,
J'espère que vous trouverez le temps de répondre... merci