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 :
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 :
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
Ca veut dire quoi ça ??
Merci encore,
J'espère que vous trouverez le temps de répondre... merci
Partager