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
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;