Der Index liegt scheinbar in den Daten bereits in dieser Form codiert vor.
Das Decodieren könnte man sicher in eine eigene Methode auslagern.
Delphi-Quellcode:
procedure TBaseData.DecodeIndex(const AIndex : DWord; out ABitOffset, ABitCount: DWord);
begin
ABitOffset := (AIndex shr 8) and $FFFFFF;
ABitCount := AIndex and $FF;
end;
Als Datentyp würde ich für diese Anwendungsfall Integer generell auch durch vorzeichenlose Typen ersetzen.