Variable de longueur variable [Résolu]

Utilisateur anonyme - 9 janv. 2009 à 23:05 - Dernière réponse :  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
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Utilisateur anonyme - 11 janv. 2009 à 15:07
3
Merci
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

Merci Utilisateur anonyme 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 69 internautes ce mois-ci

Commenter la réponse de Utilisateur anonyme
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 11 janv. 2009 à 10:49
0
Merci
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="" />
Commenter la réponse de Cirec
Commenter la réponse de Utilisateur anonyme

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.