Registriert seit: 6. Apr 2005
10.109 Beiträge
|
Re: Paradox Currency Feld umschlüsseln?
9. Feb 2006, 07:19
Guten Morgen, Mitchl.
Kennst du eigentlich diese Website: klick ?
Mit den Informationen von dort lese ich deine drei Werte ein und zeige sie an:
Delphi-Quellcode:
procedure SwapBytes( var buffer; size: word);
var
b: byte;
pbIn, pbOut: PByte;
begin
pbIn := @buffer;
Inc(pbIn, size - 1);
pbOut := @buffer;
while cardinal(pbIn) > cardinal(pbOut) do begin
b := pbOut^;
pbOut^:= pbIn^;
pbIn^ := b;
Dec(pbIn);
Inc(pbOut);
end;
end;
procedure SwitchHighBit( var buffer);
begin
Byte(buffer) := Byte(buffer) xor $80;
end;
function ParadoxDate(days: Cardinal): Integer;
const
REF1900 = 693594;
begin
Result := days - REF1900;
end;
procedure ReadValues(fn: TFileName; offset: Cardinal);
var
fs: TFileStream;
s: String;
d: Double;
c: Cardinal;
begin
fs := TFileStream.Create(fn, fmOpenRead, fmShareDenyWrite);
fs.Position := offset;
// 20 Bytes einlesen
SetLength(s, 20);
fs. Read(s[1], Length(s));
// bei trailing 0 abschneiden
s := PChar(s);
ShowMessage(Format(' string = "%s"', [s]));
// 8 byte currency value einlesen
fs. Read(d, SizeOf(d));
// highbit umkehren
SwitchHighBit(d);
// byte order umkehren
SwapBytes(d, SizeOf(d));
ShowMessage(Format(' double = "%f"', [d]));
// 4 byte date einlesen
fs. Read(c, SizeOf(c));
// highbit umkehren
SwitchHighBit(c);
// byte order umkehren
SwapBytes(c, SizeOf(c));
// Zahl der Tage seit der Zeitrechnung
ShowMessage(Format(' paradox date = "%d"', [c]));
// Umwandeln nach Delphi Date
ShowMessage(DateToStr(ParadoxDate(c)));
fs.Free;
end;
marabu
|
|
Zitat
|