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 Ein DWORD mit einem Array of Char füllen? (https://www.delphipraxis.net/8344-ein-dword-mit-einem-array-char-fuellen.html)

phlux 2. Sep 2003 19:43


Ein DWORD mit einem Array of Char füllen?
 
Hi!
Tut mir leid das dies jetzt recht trivial klingen mag in mancher Leuten Ohren :oops: aber da ich mich damit noch nie wirklich beschäftigt habe (ich habe es immer als gegeben hingenomme :? ) stellt sich mir folgendes Problem recht knifflig dar:

Delphi-Quellcode:
var
  UserName: Array[0..3] of Char;
  ID: DWORD;

begin
  UserName := 'abcd';
  //??
end;
Also wie man hier sieht habe ich einen 4 Teiligen Array vom Typen Char, den habe ich mit 'abcd' gefüllt. Jetzt mein Problem ich habe gelesen das man jetzt diesen Array in ein DWORD (was genau 4 Bytes groß sein soll laut der OH von Delphi ;) ) schreiben kann. Allerdings weiß ich nicht wie, hab zwar schon durch wild googeln und OH von Delphi herausgefunden dass es die Funktion FillChar gibt, aber diese erfüllt nicht meinen Zweck den ich verfolg, so denke ich.
Hoffe ihr könnt mir weiterhelfen.

mfg phluphie :hi:

Leuselator 2. Sep 2003 19:52

Re: Ein DWORD mit einem Array of Char füllen?
 
Delphi-Quellcode:
type
  MeinDWordPointer = ^DWord;

var
  MeinArray : Array [0..3] of Byte/Char
  MeinDWord : DWord;


nun kannst Du :

  MeinDWordPointer := @MeinDWord;
  MeinDWordPointer[0] := MeinArray[0];
etc.

[edit=Daniel B]Delphi-Tags eingefügt. Mfg, Daniel B[/edit]

Chewie 2. Sep 2003 19:52

Re: Ein DWORD mit einem Array of Char füllen?
 
Ein Array[0..3] of Char ist 4 Byte groß, ein DWord auch. Somit passt das Array rein.

Ein einfacher Cast tuts:
Delphi-Quellcode:
var
  UserName: Array[0..3] of Char;
  ID: DWORD;
begin
  UserName := #255#0#0#0;
  ID := DWord(UserName);
  ShowMessage(InttoStr(ID));
Das Ergebnis (man glaubt es kaum): 255.

phlux 2. Sep 2003 19:55

Re: Ein DWORD mit einem Array of Char füllen?
 
:hello: Danke euch beiden für die schnelle Hilfe. Es klappt wunderbar :mrgreen:

Assarbad 2. Sep 2003 20:10

Re: Ein DWORD mit einem Array of Char füllen?
 
@Chewie, dann erklär uns doch bitte nochmal, wieso du #255#0#0#0 schreibst, aber nicht die Zahl $FF000000 rauskommt ;)

Außerdem gibt es zwei elegantere Methoden obiges zu erreichen:
Delphi-Quellcode:
type
  TMyDWORD=record
  case Integer of
  0: (AsDWORD:DWORD);
  1: (AsArray:array[0..3] of Char);
  end;
var
  MyDWORD:TMyDWORD;
  MyArray:Array[0..3] of Char;
  MyDWORD2:DWORD absolute MyArray;
begin
  MyDWORD.AsDWORD :=$FF;
  MyDWORD.AsArray :=#0#0#0#$FF;
end.
MyDWORD2 und MyArray zeigen einfach auf die selbe Speicherstelle ... und bei TMyDWORD ist es nicht anders, da wir eine Union deklarieren ...

Abhängig vom Kontext würde ich die eine oder die andere Variante benutzen.

Chewie 2. Sep 2003 20:14

Re: Ein DWORD mit einem Array of Char füllen?
 
Zitat:

Zitat von Assarbad
@Chewie, dann erklär uns doch bitte nochmal, wieso du #255#0#0#0 schreibst, aber nicht die Zahl $FF000000 rauskommt ;)

Das Byte, das im Array dem Index 3 entspricht, ist das "hochwertigste", nicht das, das dem Index 0 entspricht. Wollte ich $FF000000, müsste ich #0#0#0#255 schreiben.

Christian Seehase 2. Sep 2003 20:18

Re: Ein DWORD mit einem Array of Char füllen?
 
Moin Chewie,

es liegt daran, dass ein Wert vom Typ DWORD im Intel-Format ausgelesen (und natürlich geschrieben) wird, und hierbei gilt, dass im Speicher an der niedrigsten Adresse das niederwertigste Byte steht (gilt natürlich auch analog für WORD, bzw. QUADWORD)

Chewie 2. Sep 2003 20:20

Re: Ein DWORD mit einem Array of Char füllen?
 
Genau. Bei den Bytes ist das niederwertigste am Anfang.
Und wie wars nochmal bei den Bits? Verdammt, ich kann mir das nie merken. :roll:

Christian Seehase 2. Sep 2003 20:22

Re: Ein DWORD mit einem Array of Char füllen?
 
Moin Chewie,

gilt nur für die Bytes, nicht für die Bits.

Snoop007 2. Sep 2003 20:23

Re: Ein DWORD mit einem Array of Char füllen?
 
1. das wusste ich nicht das soetwas geht, logisch ist es aber
2. wozu kann man das brauchen ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:29 Uhr.
Seite 1 von 2  1 2      

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