Hallo,
einige kleine Korrekturen:
Delphi-Quellcode:
function GetInt8(var x:Pointer):Byte;
begin
Result := PByte(x)^;
Inc (PByte(x));
end;
function GetInt(var x:Pointer):Integer;
begin
Result := PInteger(x)^;
Inc (PInteger(x));
end;
Ab Delphi 2006 könnte man das Problem natürlich auch durch
Records mit Methoden erschlagen:
Delphi-Quellcode:
type
TMemoryReader = record
private
p : Pointer;
public
procedure Init (const aValue : Pointer); inline;
function ByteValue : Byte; inline;
function IntegerValue : Integer; inline;
end;
procedure TMemoryReader.Init (const aValue : Pointer);
begin
p := aValue;
end;
function TMemoryReader.ByteValue : Byte;
begin
Result := PByte(p)^;
Inc (PByte(p));
end;
function TMemoryReader.IntegerValue : Integer;
begin
Result := PInteger(p)^;
Inc (PInteger(p));
end;
// Anwendung
var
Reader : TMemoryReader;
begin
Reader.Init (Source);
tmp1 := Reader.ByteValue;
tmp2 := Reader.IntegerValue;
end;
Man sollte aber bei all diesen Versuchen das beherzigen, was
sx2008 gesagt hat: je kompakter der Code wird, desto schwerer ist er für Dritte (und manchmal auch für den Programmierer) zu verstehen. Wer die Syntax von C++ haben möchte, der sollte besser in C++ programmieren...
Gruß Hawkeye