AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Ein DWORD mit einem Array of Char füllen?
Thema durchsuchen
Ansicht
Themen-Optionen

Ein DWORD mit einem Array of Char füllen?

Ein Thema von phlux · begonnen am 2. Sep 2003 · letzter Beitrag vom 3. Sep 2003
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von phlux
phlux

Registriert seit: 4. Nov 2002
Ort: Witten
1.335 Beiträge
 
Delphi 6 Personal
 
#1

Ein DWORD mit einem Array of Char füllen?

  Alt 2. Sep 2003, 19:43
Hi!
Tut mir leid das dies jetzt recht trivial klingen mag in mancher Leuten Ohren 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
Christian "phlux" Arndt
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#2

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

  Alt 2. Sep 2003, 19:52
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]
Tim Leuschner
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#3

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

  Alt 2. Sep 2003, 19:52
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.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von phlux
phlux

Registriert seit: 4. Nov 2002
Ort: Witten
1.335 Beiträge
 
Delphi 6 Personal
 
#4

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

  Alt 2. Sep 2003, 19:55
Danke euch beiden für die schnelle Hilfe. Es klappt wunderbar
Christian "phlux" Arndt
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#5

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

  Alt 2. Sep 2003, 20:10
@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.
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#6

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

  Alt 2. Sep 2003, 20:14
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.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#7

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

  Alt 2. Sep 2003, 20:18
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)
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#8

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

  Alt 2. Sep 2003, 20:20
Genau. Bei den Bytes ist das niederwertigste am Anfang.
Und wie wars nochmal bei den Bits? Verdammt, ich kann mir das nie merken.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#9

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

  Alt 2. Sep 2003, 20:22
Moin Chewie,

gilt nur für die Bytes, nicht für die Bits.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Snoop007

Registriert seit: 14. Jan 2003
331 Beiträge
 
Delphi 6 Personal
 
#10

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

  Alt 2. Sep 2003, 20:23
1. das wusste ich nicht das soetwas geht, logisch ist es aber
2. wozu kann man das brauchen ?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 18:28 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