Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   einzelne bytes in ein 4-byte int umwandeln (https://www.delphipraxis.net/192101-einzelne-bytes-ein-4-byte-int-umwandeln.html)

JayZ 20. Mär 2017 15:08

einzelne bytes in ein 4-byte int umwandeln
 
hallo

es gibt doch in c++ den operator >> mit dem man irgendwie bytes rumschrieben kann. kann man in delphi irgendwie 4 bytes definieren und dann diese vier bytes zussamenfügen das es das ergiebt:

Delphi-Quellcode:
var
 b1, b2, b3, b4 : byte;
 int : integer;
begin
 b1 := $AB;
 b2 := $CD;
 b3 := $EF;
 b4 := $42;
// int := $ABCDEF42;
end;
am liebsten math operationen, ich krieg nur ein string gewrustel hin :(

dankeschon mal! :stupid:

Geda 20. Mär 2017 15:16

AW: einzelne bytes in ein 4-byte int umwandeln
 
var
b1, b2, b3, b4 : byte;
int : integer;
begin
b1 := $AB;
b2 := $CD;
b3 := $EF;
b4 := $42;

int := b1;
int := (int shl 8) + b2;
int := (int shl 8) + b3;
int := (int shl 8) + b4;

ShowMessage(IntToHex(int, 8));


Gruß,

Geert

DeddyH 20. Mär 2017 15:23

AW: einzelne bytes in ein 4-byte int umwandeln
 
Es ginge auch mit einem varianten Record:
Delphi-Quellcode:
type
  TZahl = record
    case integer of
      1: (Zahl: integer);
      2: (b4, b3, b2, b1: Byte)
  end;


procedure TFormTest.FormCreate(Sender: TObject);
var
  Zahl: TZahl;
begin
  Zahl.b1 := $AB;
  Zahl.b2 := $CD;
  Zahl.b3 := $EF;
  Zahl.b4 := $42;
  ShowMessage(IntToHex(Zahl.Zahl, 8));
end;

Neutral General 20. Mär 2017 15:44

AW: einzelne bytes in ein 4-byte int umwandeln
 
Oder in einer Zeile ohne Records:

Delphi-Quellcode:
Int := (B1 shl 24) or (B2 shl 16) or (B3 shl 8) or B4;

JayZ 20. Mär 2017 15:51

AW: einzelne bytes in ein 4-byte int umwandeln
 
wow das sind aber viele möglichkeiten hehe
vielen vielen dank euch allen =)

p80286 20. Mär 2017 15:55

AW: einzelne bytes in ein 4-byte int umwandeln
 
oder so:

Delphi-Quellcode:
var
  i : integer;
  b : Array [0..3] of Byte absolute i;

begin
  b[0]:=$AB;
  b[1]:=$CD;
  b[2]:=$EF;
  b[3]:=$42;
end;
(:hi: Mavarik)

Gruß
K-H

Uwe Raabe 20. Mär 2017 15:58

AW: einzelne bytes in ein 4-byte int umwandeln
 
Ähnlich dem, was DeddyH gezeigt hat, nur mit Bordmitteln:
Delphi-Quellcode:
var
  Zahl: LongRec; { in Sysutils }
begin
  Zahl.Bytes[0] := $AB;
  Zahl.Bytes[1] := $CD;
  Zahl.Bytes[2] := $EF;
  Zahl.Bytes[3] := $42;
  ShowMessage(Integer(Zahl).ToHexString(8));
end;
Oder unter Verwendung von Winapi.Windows:

Delphi-Quellcode:
  ShowMessage(MakeLong(MakeWord($42, $EF), MakeWord($CD, $AB)).ToHexString(8));

Rollo62 20. Mär 2017 16:04

AW: einzelne bytes in ein 4-byte int umwandeln
 
Die Frage die ich mir immer stelle ist: Was ist denn jetzt das Schnellste ?

DeddyHs und Mavariks Lösungen habe ich ja im Verdacht ganz gut zu sein.

Aber es könnte am Ende doch NeutralGeneral der Gewinner sein,
weil da der Compiler die Chance hat bis auf die Knochen zu optimieren.

Hat das schonmal mal einer vermessen ?

Rollo

Neutral General 20. Mär 2017 16:17

AW: einzelne bytes in ein 4-byte int umwandeln
 
Die Record-Varianten (und das absolute) sind wahrscheinlich am schnellsten weil da quasi gar nichts gerechnet wird.

p80286 20. Mär 2017 16:40

AW: einzelne bytes in ein 4-byte int umwandeln
 
Frage:
muß das nicht
Delphi-Quellcode:
packed record
sein?
oder ist das bei varianten Records automatisch dabei?

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:44 Uhr.
Seite 1 von 3  1 23      

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