Thema: Delphi Skype Timestamp format

Einzelnen Beitrag anzeigen

Benutzerbild von nicodex
nicodex

Registriert seit: 2. Jan 2008
Ort: Darmstadt
286 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Skype Timestamp format

  Alt 23. Apr 2009, 10:19
Das Format sieht nach folgender "Idee" aus:
7 Bits Daten
1 Bit (MSB) Flag (1 = ein weiteres Byte einlesen)

So lassen sich kleine Integer-Werte platzsparend speichern (0..127 = 1 Byte).

Beispiel zum Lesen eines 32-Bit Integers (mit Datenzeiger und (restlicher) Datengröße als Parameter):
Delphi-Quellcode:
function ReadLong(var AData: Pointer; var ASize: Cardinal): LongWord;
var
  Index: Integer;
  Value: Byte;
begin
  Result := 0;
  Index := 0;
  repeat
    if ASize = 0 then
      raise EReadError.CreateRes(PResStringRec(@SReadError));
    Value := PByte(AData)^;
    if (Value and $7F) <> 0 then
    begin
      if (Index >= 32) or ((Index >= 28) and ((Value and $70) <> 0)) then
        raise EIntOverflow.CreateRes(PResStringRec(@SIntOverflow));
      Inc(Result, (Value and $7F) shl Index);
    end;
    Inc(Index, 7);
    Inc(PByte(AData));
    Dec(ASize);
  until Value and $80 = 0;
end;
  Mit Zitat antworten Zitat