![]() |
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:
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.
var
UserName: Array[0..3] of Char; ID: DWORD; begin UserName := 'abcd'; //?? end; Hoffe ihr könnt mir weiterhelfen. mfg phluphie :hi: |
Re: Ein DWORD mit einem Array of Char füllen?
Delphi-Quellcode:
etc.
type
MeinDWordPointer = ^DWord; var MeinArray : Array [0..3] of Byte/Char MeinDWord : DWord; nun kannst Du : MeinDWordPointer := @MeinDWord; MeinDWordPointer[0] := MeinArray[0]; [edit=Daniel B]Delphi-Tags eingefügt. Mfg, Daniel B[/edit] |
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:
Das Ergebnis (man glaubt es kaum): 255.
var
UserName: Array[0..3] of Char; ID: DWORD; begin UserName := #255#0#0#0; ID := DWord(UserName); ShowMessage(InttoStr(ID)); |
Re: Ein DWORD mit einem Array of Char füllen?
:hello: Danke euch beiden für die schnelle Hilfe. Es klappt wunderbar :mrgreen:
|
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:
MyDWORD2 und MyArray zeigen einfach auf die selbe Speicherstelle ... und bei TMyDWORD ist es nicht anders, da wir eine Union deklarieren ...
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. Abhängig vom Kontext würde ich die eine oder die andere Variante benutzen. |
Re: Ein DWORD mit einem Array of Char füllen?
Zitat:
|
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) |
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: |
Re: Ein DWORD mit einem Array of Char füllen?
Moin Chewie,
gilt nur für die Bytes, nicht für die Bits. |
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. |
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