Variable de longueur variable

Résolu
Signaler
-
 Utilisateur anonyme -
Salut à tous

J'ai trouvé un algorithme en C dont voici le code :

WriteVarLen (value) register long value;
 { register long buffer;
  buffer = value & 0x7f;
  while ((value >>= 7) > 0)
     { buffer <<= 8;
     buffer |= 0x80;
     buffer += (value & 0x7f);
     }  
  while (TRUE)
     { putc(buffer,outfile);
    if (buffer & 0x80) buffer >>= 8;
    else break; }
     }

J'ai essaye de le traduire en Delphi  :

Procedure VLV(Value : LongInt);
Var
  Buffer:Longint;
  F:file of Longint;
begin
assignfile(F,'C:\Test.aze');
rewrite(F);
buffer := value And $7f;
value:=value SHR 7;
while (Value > 0) Do
  Begin
  buffer:=buffer SHL 8;
  buffer:=buffer Or $80;
  buffer :=buffer + (value AND $f);
  value:=value SHR 7;
  End;
while (TRUE) Do
  Begin
  write(F,Buffer);
    If (Buffer And $80=1) Then Buffer:=Buffer SHR $8
    Else Break;
  End;
closefile(F);
end;

Seulement le résultat obtenu n'est pas celui escompté.

Si quelqu'un pouvait me dire ou j'ai foiré la traduction ca serait cool merci

3 réponses


Salut Cirec

Un exemple c'est mieux qu'un long discours :
http://en.wikipedia.org/wiki/Variable-length_quantity


Grosso modo ca sert à transformer un nombre en une suite de bytes

J'ai trouvé un truc que j'ai bidouillé (Par contre le résultat est en BigEndian)

function ByteCount(del : Longint) : byte;
var
  d : Longint;
  b : byte;
begin
  d := del;
  b := 1;
  while d >= 128 do
  begin
    d := (d shr 7);
    b := b + 1;
  end;
  ByteCount := b;
end;

procedure Put_Delta_Time(del : Longint);
var
  d,W : Longint;
  tel,k : byte;
begin
  d := del;
  tel := ByteCount(d);
  w:=byte(d and $0000007F);
  Showmessage(IntToStr(w));
  if tel=1 then Exit;
  for k := 1 to tel-1 do
  begin
    d := d shr 7;
    W:=byte((d and $0000007F) or $80);
    Showmessage(IntToStr(w));
  end;
end;

Merci
Messages postés
3827
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
16 décembre 2021
46
Salut,

"Seulement le résultat obtenu n'est pas celui escompté."

et c'est quoi le résultat escompté

pourrais tu nous en dire un peut plus à ce sujet

 
@+
Cirec

<hr siz="" />

Oupss un soucis avec le lien désolé : http://en.wikipedia.org/wiki/Variable-length_quantity