![]() |
Zugriff auf einzelne Bytes eines DWORD / Cardinal
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:
auf die High und Low Bytes zugreifen.
Hi
Lo Aber wie teile ich das DWORD in 2 Words, indem ich die Bits schiebe (shl / shr)??? :gruebel: Danke Euch |
Re: Zugriff auf einzelne Bytes eines DWORD / Cardinal
Zitat:
Gruß, teebee |
Re: Zugriff auf einzelne Bytes eines DWORD / Cardinal
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... |
Re: Zugriff auf einzelne Bytes eines DWORD / Cardinal
Zitat:
LoWord ist einfach ein Cast nach Word, HiWord eine Funktion, die mit dem DWORD ein shr 16 macht. |
Re: Zugriff auf einzelne Bytes eines DWORD / Cardinal
Danke!
Wieder was gelernt! Wobei die Funktion auch ein fach nur um 16 nach rechts bzw. links schiebt... |
Re: Zugriff auf einzelne Bytes eines DWORD / Cardinal
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:
und
HiByte(HiWord(einDword))
LoByte(HiWord(einDword))
Delphi-Quellcode:
darauf zugreifen...
HiByte(LoWord(einDword))
LoByte(LoWord(einDword)) Danke euch!! |
Re: Zugriff auf einzelne Bytes eines DWORD / Cardinal
Delphi-Quellcode:
Man muss nur auf die Rechner-Architektur achten!
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]; |
Re: Zugriff auf einzelne Bytes eines DWORD / Cardinal
Hallo,
du kannst auch den Typ LongRec aus der Unit SysUtils verwenden:
Delphi-Quellcode:
Gruß Hawkeye
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; |
Re: Zugriff auf einzelne Bytes eines DWORD / Cardinal
Hi,
unbedingt die Reihenfolge in einem Word beachten, schreibe 256 rein und Bytes Anzeigen. Wo steht die 1? :wall: |
Re: Zugriff auf einzelne Bytes eines DWORD / Cardinal
eine weitere Möglichkeit ist die Adresse der Variablen zu nehmen und diese ein paar Bytes weiter zu rücken.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:25 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