AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Cardinal in Bytes speichern

Ein Thema von xZise · begonnen am 27. Okt 2008 · letzter Beitrag vom 28. Okt 2008
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#11

Re: Cardinal in Bytes speichern

  Alt 27. Okt 2008, 23:28
Zitat von xZise:
Wie stellst du dir das vor?
Naja so:


Delphi-Quellcode:
type
  TFoo = packed record
    case Integer of
      0: (arr: array[0..5] of Byte);
      1: (
           dummy1: Word;
           Wert: Cardinal;
         );
  end;

var foo: TFoo;
    i: Integer;
begin
  // foo füllen
  for i:= 0 to 5 do
    foo.arr[i] := random(256); // ka.. deine daten halt
  // Du willst jetzt nur den Errorcode?
  // ==>
  // Der steht in foot.Wert:
  Send(foo.Wert);
end;
Oder eben umgekehrt. In den Cardinal schreiben und die Bytes auslesen. Die 6 Bytes und der 1. Word + der Cardinal belegen den gleichen Speicher:

Code:
-----------------------------------------------------
| Byte1 | Byte2 | Byte3 | Byte4 | | Byte5 | | Byte6 |
------------------------------------------------------
|    dummy1     |       W     e     r     t     |
------------------------------------------------------
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von x000x
x000x

Registriert seit: 21. Jan 2004
Ort: Bei Hamburg
308 Beiträge
 
Delphi XE2 Professional
 
#12

Re: Cardinal in Bytes speichern

  Alt 28. Okt 2008, 00:40
Moin moin,

eine weitere Möglichkeit wäre noch der Weg über Pointer:
Delphi-Quellcode:
//...
var
   Arr : Array[0..5] of Byte;
   P : PCardinal;
   Wert : Cardinal;
begin
   Wert := 4294967295;
   //Cardinal in Array scheiben
   P := @Arr[2];
   P^:= Wert;
   // und wieder auslesen
   // Little Endian
   //WertNeu := (Arr[5] shl 24) or (Arr[4] shl 16) or (Arr[3] shl 8) or Arr[2];
   xxx := PCardinal(@Arr[2])^;
//...

//...
   // bzw gleich so
   PCardinal(@Arr[2])^ := 4294967295;
   // und auslesen halt wieder
   xxx := PCardinal(@Arr[2])^;
Peter
-= Gruss Peter =-
-= alias x000x =-
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#13

Re: Cardinal in Bytes speichern

  Alt 28. Okt 2008, 18:04
Zitat von x000x:
Moin moin,

eine weitere Möglichkeit wäre noch der Weg über Pointer:
Delphi-Quellcode:
//...
var
   Arr : Array[0..5] of Byte;
   P : PCardinal;
   Wert : Cardinal;
begin
   Wert := 4294967295;
   //Cardinal in Array scheiben
   P := @Arr[2];
   P^:= Wert;
   // und wieder auslesen
   // Little Endian
   //WertNeu := (Arr[5] shl 24) or (Arr[4] shl 16) or (Arr[3] shl 8) or Arr[2];
   xxx := PCardinal(@Arr[2])^;
//...

//...
   // bzw gleich so
   PCardinal(@Arr[2])^ := 4294967295;
   // und auslesen halt wieder
   xxx := PCardinal(@Arr[2])^;
An sowas dachte ich halt Ich schreibe mal eine Demoapplikation.

MfG
xZise
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#14

Re: Cardinal in Bytes speichern

  Alt 28. Okt 2008, 18:10
Zitat von Hawkeye219:
Hallo,

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

Gruß Hawkeye
Wird das eigentlich von Delphi noch unterstüzt? Hab da was im Kopf, aber kann möglicherweise zu einem ganz anderen Thema gewesen sein.
  Mit Zitat antworten Zitat
Benutzerbild von x000x
x000x

Registriert seit: 21. Jan 2004
Ort: Bei Hamburg
308 Beiträge
 
Delphi XE2 Professional
 
#15

Re: Cardinal in Bytes speichern

  Alt 28. Okt 2008, 18:16
Moin moin,

wie gesagt, dass war nur eine weitere Möglichkeit. Ich persönlich würde die Variante von jfheins
auch bevorzugen.
Peter
-= Gruss Peter =-
-= alias x000x =-
  Mit Zitat antworten Zitat
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#16

Re: Cardinal in Bytes speichern

  Alt 28. Okt 2008, 18:31
Habs grad mal getestet, scheint noch zu funktionieren, entschuldigt die unnötige Verwirrung
Delphi-Quellcode:
  TA = record
    AByte: Byte;
    BInt: Integer;
  end;
  TB = packed record
    AByte: Byte;
    BInt: Integer;
  end;
TA: 8 Bytes
TB: 5 Bytes
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
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