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;