Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Cardinal in Bytes speichern (https://www.delphipraxis.net/123099-cardinal-bytes-speichern.html)

xZise 27. Okt 2008 18:05


Cardinal in Bytes speichern
 
Hallo ihr,

ich habe folgendes "Problem". Und zwar läuft eine Verbindung zwischen zwei Punkten mithilfe von Bytearrays ab. Bisher hat das gereicht, aber jetzt will ich den ErrCode übertragen. Aber wie macht man das? Der ist ja 4 Byte lang. Und ich hätte dann 6 Bytes zur Verfügung wo der Cardinal in den letzt 4 gespeichert wird.

MfG
xZise

turboPASCAL 27. Okt 2008 18:40

Re: Cardinal in Bytes speichern
 
Schlecht zu beantworten, wie ist denn der ErrorCode definiert bzw. wie gross kann der enthaltene Wert werden ?

Cardinal = 8 Byte bzw. 32 Bit

das heisst du breutest 2 mal 6 Bytes zur die du zur Verfügung hast um ein 8 Byte-Wert zu übertragen.

xZise 27. Okt 2008 18:42

Re: Cardinal in Bytes speichern
 
Also ich habe mit der Codevervollständigung geguckt und diese gibt mir halt Cardinal an. Bzw. im Code ist es als DWord definiert was ja ein Cardinal auch ist.

MfG
xZise

jfheins 27. Okt 2008 18:44

Re: Cardinal in Bytes speichern
 
Genau. DWord (32bit = 4 Bytes) und nicht 8 Bytes :mrgreen:

Schau dir mal variante records an, damit kannst du den Cardinal als Bytearray ansprechen und umgekehrt - falls es das ist, was du willst :gruebel:

turboPASCAL 27. Okt 2008 18:47

Re: Cardinal in Bytes speichern
 
Zitat:

Zitat von jfheins
Genau. DWord (32bit = 4 Bytes) und nicht 8 Bytes :mrgreen:

Klar. :wall: ( Ich Schussel )

xZise 27. Okt 2008 21:08

Re: Cardinal in Bytes speichern
 
Naja meine Frage ist einfach wie kriege ich die da am einfachsten rein.

Einfach das?
Delphi-Quellcode:
for i := 0 to 3 do
  b[i + 2] := ErrCode div Power(255, i);
Ich dachte das man einfach die Bits über das Array schiebt:
Code:
Array: 01010101 01010101 10011001 01100110 10100101 11000110
-------- Head ---------- ---------------Data----------------
                             ^        ^        ^       ^
Cardinal:               10011001 01100110 10100101 11000110
Sozusagen setzte die 32 bits des Cardinals in die Byteschlange des Arrays ab dem 16. / 17. Bit.

MfG
xZise

jfheins 27. Okt 2008 21:15

Re: Cardinal in Bytes speichern
 
Ich finde das heir wesenlich einfacher:
Delphi-Quellcode:
type
  Foo = record
    case Integer of
      0: (arr: array[0..5] of Byte);
      1: (
           dummy1: Word;
           Wert: Cardinal;
         );
  end;
Dann einfach in Wert deinen Cardinalwert reinschrieben, und du kannst ihn in arr als Bytearray wieder rausholen ;)

uligerhardt 27. Okt 2008 21:16

Re: Cardinal in Bytes speichern
 
Ungetestet:
Delphi-Quellcode:
for i := 0 to 3 do
  b[i + 2] := LongRec(ErrCode).Bytes[i];
Uli.

Hawkeye219 27. Okt 2008 21:20

Re: Cardinal in Bytes speichern
 
Hallo,

ohne das Schlüsselwort "packed" könnte die Lösung mit dem varianten Record aber ins Auge gehen...

Gruß Hawkeye

xZise 27. Okt 2008 21:42

Re: Cardinal in Bytes speichern
 
Zitat:

Zitat von jfheins
Ich finde das heir wesenlich einfacher:
Delphi-Quellcode:
type
  Foo = record
    case Integer of
      0: (arr: array[0..5] of Byte);
      1: (
           dummy1: Word;
           Wert: Cardinal;
         );
  end;
Dann einfach in Wert deinen Cardinalwert reinschrieben, und du kannst ihn in arr als Bytearray wieder rausholen ;)

Wie stellst du dir das vor?


Zitat:

Zitat von Hawkeye219
Hallo,

ohne das Schlüsselwort "packed" könnte die Lösung mit dem varianten Record aber ins Auge gehen...

Gruß Hawkeye

Naja noch ist er das nicht.

MfG
xZise


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:21 Uhr.
Seite 1 von 2  1 2      

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