AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Zugriff auf einzelne Bytes eines DWORD / Cardinal
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriff auf einzelne Bytes eines DWORD / Cardinal

Ein Thema von DelphiManiac · begonnen am 9. Mai 2007 · letzter Beitrag vom 9. Mai 2007
Antwort Antwort
DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#1

Zugriff auf einzelne Bytes eines DWORD / Cardinal

  Alt 9. Mai 2007, 11:03
Hallo,

ich habe zurzeit folgendes Problem:

ich bekomme eine DWORD bzw Cardinal übergeben und muss auf die einzelnen Bytes zugreifen können.

Beispiel

11111111 11111111 1111111 11111111
--------------------------'-----------------------------
Word H __________________Word L


Also ich will dann auf das 1. und 2. Byte von Word H und Word L
zugreifen können


Vielleicht könnt ihr mir da ja helfen

Wenn ich es in 2 Word aufteilt habe, dann kann ich ja über
Delphi-Quellcode:
Hi
Lo
auf die High und Low Bytes zugreifen.

Aber wie teile ich das DWORD in 2 Words,

indem ich die Bits schiebe (shl / shr)???

Danke Euch
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#2

Re: Zugriff auf einzelne Bytes eines DWORD / Cardinal

  Alt 9. Mai 2007, 11:23
Zitat von DelphiManiac:
Aber wie teile ich das DWORD in 2 Words
Mit LoWord und HiWord,

Gruß, teebee
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Zugriff auf einzelne Bytes eines DWORD / Cardinal

  Alt 9. Mai 2007, 11:25
Ich bin mir zwar nicht sicher ob das funktioniert, aber du kannst versuchen das DWORD durch schieben aufzuteilen.

Eigentlich müsstest du durch 4x schieben jedes Byte in eine eigene Variable schreiben können, dann kannst du damit ja weiterarbeiten.

LoWord und HiWord hab ich in der Hilfe nicht gefunden...
Marc
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#4

Re: Zugriff auf einzelne Bytes eines DWORD / Cardinal

  Alt 9. Mai 2007, 11:29
Zitat von divBy0:
LoWord und HiWord hab ich der Hilfe nicht gefunden...
Das sind Makros aus dem Windows-API (windef.h), die in windows.pas zu finden sind.
LoWord ist einfach ein Cast nach Word, HiWord eine Funktion, die mit dem DWORD ein shr 16 macht.
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Zugriff auf einzelne Bytes eines DWORD / Cardinal

  Alt 9. Mai 2007, 11:36
Danke!

Wieder was gelernt! Wobei die Funktion auch ein fach nur um 16 nach rechts bzw. links schiebt...
Marc
  Mit Zitat antworten Zitat
DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#6

Re: Zugriff auf einzelne Bytes eines DWORD / Cardinal

  Alt 9. Mai 2007, 11:37
Hallo,

HiWord und LoWord sind genau die Funktionen (die ein Makro kapseln wie Teebee richtig beschreibt) die ich gesucht habe,

nun kann ich dann mit

Delphi-Quellcode:
 HiByte(HiWord(einDword))
 LoByte(HiWord(einDword))
und

Delphi-Quellcode:
 HiByte(LoWord(einDword))
 LoByte(LoWord(einDword))
darauf zugreifen...

Danke euch!!
  Mit Zitat antworten Zitat
SebE

Registriert seit: 31. Jul 2004
Ort: Chemnitz
316 Beiträge
 
Delphi 7 Personal
 
#7

Re: Zugriff auf einzelne Bytes eines DWORD / Cardinal

  Alt 9. Mai 2007, 11:44
Delphi-Quellcode:
type
  WordTeiler = record
    case BYTE of
    0: (dw: DWORD);
    1: (wa: array[0..1] of WORD);
  end;

var
  i: DWORD;
  w: WORD;

...

w := WordTeiler(i).wa[0];
Man muss nur auf die Rechner-Architektur achten!
Sebastian
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Zugriff auf einzelne Bytes eines DWORD / Cardinal

  Alt 9. Mai 2007, 11:44
Hallo,

du kannst auch den Typ LongRec aus der Unit SysUtils verwenden:

Delphi-Quellcode:
var
  Value : Cardinal;
begin
  Value := $12345678;
  with LongRec(Value) do
    ShowMessage (Format('%.2x %.2x %.2x %.2x', [Bytes[0], Bytes[1], Bytes[2], Bytes[3]]));
end;
Gruß Hawkeye
  Mit Zitat antworten Zitat
Nachtreiter
(Gast)

n/a Beiträge
 
#9

Re: Zugriff auf einzelne Bytes eines DWORD / Cardinal

  Alt 9. Mai 2007, 13:55
Hi,
unbedingt die Reihenfolge in einem Word beachten, schreibe 256 rein und Bytes Anzeigen.
Wo steht die 1?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Zugriff auf einzelne Bytes eines DWORD / Cardinal

  Alt 9. Mai 2007, 14:59
eine weitere Möglichkeit ist die Adresse der Variablen zu nehmen und diese ein paar Bytes weiter zu rücken.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort


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:36 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