Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Int64 zerlegen und zusammenbauen (https://www.delphipraxis.net/91586-int64-zerlegen-und-zusammenbauen.html)

Neutral General 7. Mai 2007 12:44


Int64 zerlegen und zusammenbauen
 
Hi,

Ich würde gerne ein Int64 in seine 8 Bytes zerlegen... Nur bräuchte man dafür sowas wie HiInteger... Ab Integer ist das ja kein Problem mehr (HiWord,HiByte)... Und das ganze muss natürlich wieder zusammensetzbar sein..

Gruß
Neutral General

cruiser 7. Mai 2007 12:54

Re: Int64 zerlegen und zusammenbauen
 
AFAIK gibt es ein Int64def -record oder so ähnlich... ich muss mal nachsehn

Edit: Kannst du aber auch selber machen:

Delphi-Quellcode:
TInt64def = record
  case Integer of
    0: ( Int64val: Int64);
    1: ( LowInt, HighInt: Cardinal);
    2: ( Word1, Word2, Word3, Word4: Word);
    3: ( Byte1,Byte2, ... ,Byte8: Byte);
  end;
end;

sirius 7. Mai 2007 12:55

Re: Int64 zerlegen und zusammenbauen
 
Es gäbe da noch:
shl
shr
mod
div

und zur Not kannst du auch mit 2 pinteger auf die int64 variable zugreifen.
Edit: Die Not:
Delphi-Quellcode:
function HighDWord(value:int64):DWord; stdcall;
var int:pcardinal;
begin
  int:=@value;
  inc(int);
  result:=int^;
end;
function LowDWord(value:int64):DWord; stdcall;
var int:pcardinal;
begin
  int:=@value;
  result:=int^;
end;
Ich hoffe, das war jetzt richtig rum.

Robert Marquardt 7. Mai 2007 12:55

Re: Int64 zerlegen und zusammenbauen
 
Na mach dir ein variantes Record das aus einem Array von 8 Bytes und einem Int64 besteht.

sakura 7. Mai 2007 13:04

Re: Int64 zerlegen und zusammenbauen
 
Hier mal eine einfache Lösung (ähnlich der von cruiser):
Delphi-Quellcode:
procedure TForm1.Edit1Change(Sender: TObject);
type
  T64 = packed record
    case Tag: Byte of
      0: (I64: Int64);
      1: (B64: array[0..7] of Byte);
  end;
var
  B: Byte;
  T: T64;
begin
  try
    Memo1.Clear;
    T.I64 := StrToInt64(Edit1.Text);
    for B := Low(T.B64) to High(T.B64) do
      Memo1.Lines.Add(IntToHex(T.B64[B], 2));
  except
    //
  end;
end;
Ein Edit und ein Memo auf dem Form. Code ins OnChange vom Edit.

...:cat:...

Neutral General 7. Mai 2007 15:01

Re: Int64 zerlegen und zusammenbauen
 
Hi,

Danke für die Antworten.. Das gefällt mir doch schonmal.. :)

vergesst das was eben hier stand... so ein "packed" kann schon Wunder wirken :mrgreen:

Gruß
Neutral General


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz