Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Array of Byte in Array of Integer (https://www.delphipraxis.net/71173-array-byte-array-integer.html)

jmd anders 10. Jun 2006 09:37


Array of Byte in Array of Integer
 
Hallo zusammen,


ich habe das problem, dass mir ein Array mit byte werten vorliegt, die ich aber gerne als integer darstellen möchte, das heißt: ich brauche eine umwandlung.
ich würde gerne jeweils 4 byte werte zu einem integer wert zusammenfassen, und das ohne großen rechenaufwand. Im speicher liegen die 4 bytes ja einfach nur hintereinander, da muss es ja eigentlich möglich sein, statt 4 mal einen byte wert zu speichern die 4 werte aufeinmal zu speichern und als integer zu zeigen.


danke :)

markusj 10. Jun 2006 09:45

Re: Array of Byte in Array of Integer
 
Ich gehe davon aus, dass es sich bei diesen vier Bytes um die vier Bestandteile deines Integers handelt, richtig?
Dann könntest du
(als Bombensicher funktionierende möglichkeit, ich hab gerade keine Ahnung, wie du direkt auf die Integer-Bytes zugreifen kannst)
Einen TMemoryStream anlegen, die ersten vier Bytes in richtiger Reihenfolge mittels write(byte[i,j],1) hineinschreiben,
dann ein seek(0,soFromBeginning) machen und deinen Integer mittels read(integer[i],4) abholen ...
Es geht bestimmt effezienter, aber so finde ich's am einfachsten ...

mfG

Markus

himitsu 10. Jun 2006 10:23

Re: Array of Byte in Array of Integer
 
Delphi-Quellcode:
Type TByteArray = packed Array of Byte;
  TIntegerArray = packed Array of Integer;
  PIntegerArray = ^TIntegerArray;

Var BA: TByteArray;

PIntegerArray(@BA)^
Also PIntegerArray(@BA)^[0] für'n ersten Integer.

LENGTH des IntegerArrays ist dann natürlich Length(BA) div 4 und nicht Length(PIntegerArray(@BA)^) :warn:

Wenn du aber ein statisches ByteArray hast, dann auch so
Delphi-Quellcode:
Type TMyArray = packed Record
    Case Integer of
      0: (B: packed Array[0..Len-1] of Byte);
      1: (I: packed Array[0..Len div 4-1] of Integer);
  End;

Var MyArray: TMyArray;
Über MyArray.I kommst du dann an die Integerversion und mit MyArray.B die ByteVersion.

xaromz 10. Jun 2006 10:51

Re: Array of Byte in Array of Integer
 
Hallo,
Zitat:

Zitat von himitsu
Delphi-Quellcode:
Type TMyArray = packed Array
    Case Integer of
      0: (I: packed Array[0..Len-1] of Byte);
      1: (B: packed Array[0..Len div 4-1] of Integer);
  End;

Var MyArray: TMyArray;
Über MyArray.I kommst du dann an die Integerversion und mit MyArray.B die ByteVersion.

Sollten da nicht I und B ausgetauscht werden :gruebel: ?

Gruß
xaromz

jmd anders 10. Jun 2006 11:08

Re: Array of Byte in Array of Integer
 
Danke himitsu hat mir sehr viel weitergeholfen :)

himitsu 10. Jun 2006 12:01

Re: Array of Byte in Array of Integer
 
Zitat:

Zitat von xaromz
Sollten da nicht I und B ausgetauscht werden :gruebel: ?

hast recht ... is geändert.

Na ja, es kommt halt nurdarauf hinaus, dass man zwar den Speicherplatz gleich läßt, aber dafür den Zugriff darauf andert.

[edit]
:shock: BlackJack hat recht :wall:

BlackJack 10. Jun 2006 15:45

Re: Array of Byte in Array of Integer
 
sollte TMyArray nicht ein record sein?


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:48 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