Variable de longueur variable

Résolu
Utilisateur anonyme - 9 janv. 2009 à 23:05
 Utilisateur anonyme - 11 janv. 2009 à 15:08
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

Utilisateur anonyme
11 janv. 2009 à 15:07
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
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
11 janv. 2009 à 10:49
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="" />
0
Utilisateur anonyme
11 janv. 2009 à 15:08
Oupss un soucis avec le lien désolé : http://en.wikipedia.org/wiki/Variable-length_quantity
0
Rejoignez-nous