![]() |
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 |
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. |
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 |
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: |
Re: Cardinal in Bytes speichern
Zitat:
|
Re: Cardinal in Bytes speichern
Naja meine Frage ist einfach wie kriege ich die da am einfachsten rein.
Einfach das?
Delphi-Quellcode:
Ich dachte das man einfach die Bits über das Array schiebt:
for i := 0 to 3 do
b[i + 2] := ErrCode div Power(255, i);
Code:
Sozusagen setzte die 32 bits des Cardinals in die Byteschlange des Arrays ab dem 16. / 17. Bit.
Array: 01010101 01010101 10011001 01100110 10100101 11000110
-------- Head ---------- ---------------Data---------------- ^ ^ ^ ^ Cardinal: 10011001 01100110 10100101 11000110 MfG xZise |
Re: Cardinal in Bytes speichern
Ich finde das heir wesenlich einfacher:
Delphi-Quellcode:
Dann einfach in Wert deinen Cardinalwert reinschrieben, und du kannst ihn in arr als Bytearray wieder rausholen ;)
type
Foo = record case Integer of 0: (arr: array[0..5] of Byte); 1: ( dummy1: Word; Wert: Cardinal; ); end; |
Re: Cardinal in Bytes speichern
Ungetestet:
Delphi-Quellcode:
Uli.
for i := 0 to 3 do
b[i + 2] := LongRec(ErrCode).Bytes[i]; |
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 |
Re: Cardinal in Bytes speichern
Zitat:
Zitat:
MfG xZise |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz