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 Aus einem Word das High und Low Byte extrahieren (https://www.delphipraxis.net/84393-aus-einem-word-das-high-und-low-byte-extrahieren.html)

DelphiManiac 16. Jan 2007 13:34


Aus einem Word das High und Low Byte extrahieren
 
Hallo ich habe folgendes Problem,

ich habe ein Word:
Delphi-Quellcode:
..
var
 einWord:Word;
 HighByte:Byte;
 LowByte:Byte;
begin
 einWord:=$AAFF;
...
 HighByte:= GiveMeHighByte(einWord); // ich will auf das Highbyte (hier $AA)
 LowByte:= GiveMeLowByte(einWord); // und das Lowbyte hier($FF) zurückgeliefert bekommen
...
Gibt es hier für eine Delphi Funktion ??
Oder muss ich über die Hex (String)-Umwandlung gehen???

Danke schonmal im Vorraus.

3_of_8 16. Jan 2007 13:36

Re: Aus einem Word das High und Low Byte extrahieren
 
Es gibt die Hi und Lo-Funktionen, geht aber auch selber ganz leicht:

Delphi-Quellcode:
hibyte:=myword shr 8;
lobyte:=myword and $FF;
Ein Word sieht ja so aus:

Code:
hh hh hh hh ll ll ll ll
Wenn du das jetzt um 8 nach rechts shiftest, siehts so aus:

Code:
00 00 00 00 hh hh hh hh
Und bei and $FF siehts so aus:

Code:
00 00 00 00 ll ll ll ll

richard_boderich 16. Jan 2007 13:38

Re: Aus einem Word das High und Low Byte extrahieren
 
gibts dafuer nicht die Lo("wert") und Hi("wert") anweisungen ?

richard

3_of_8 16. Jan 2007 13:38

Re: Aus einem Word das High und Low Byte extrahieren
 
Nein, Low/High geben den Maximal- und Minimalwert für einen Typen zurück.

sirius 16. Jan 2007 13:40

Re: Aus einem Word das High und Low Byte extrahieren
 
viele Wege wführen nach Rom:
Delphi-Quellcode:
highword:=wert div 65536;
lowword:=wert mod 65536;
Edit:
Delphi-Quellcode:
highbyte:=lowword div 256;
lowbyte:=lowword mod 256;
Oder noch ganz anders:
Delphi-Quellcode:
asm
  xor eax,eax
  mov eax,dword ptr wert
  mov lowword, ax
  mov highbyte, ah
  mov lowbyte, al
end;

DelphiManiac 16. Jan 2007 13:44

Re: Aus einem Word das High und Low Byte extrahieren
 
Hey danke sirus,

ja hatte es erst mit High() u. Low() probiert,

hatte die Funktion auch schonmal angewendet, wusste nur nicht mehr wie sie heißt...

Jetzt weiß ich es Hi u. Lo. heißt... danke.

3_of_8 16. Jan 2007 14:40

Re: Aus einem Word das High und Low Byte extrahieren
 
@Sirius: Die ersten beiden Methoden sind viel umständlicher und langsamer, die letzte ist wirklich unnötig kompliziert. Inline-Assembler ist ne tolle Sache, aber man kann es auch übertreiben. ;)

SirThornberry 16. Jan 2007 14:43

Re: Aus einem Word das High und Low Byte extrahieren
 
man kann sich auch einfach einen record der gleichen größe erstellen, das ganze auf den Recordtyp casten und dann entsprechend auf die Werte zugreifen. Oder man nimmt die Speicheradresse interpretiert diese als PByte und addiert halt das eine Byte dazu um auf das nächste Byte zu gelangen.

3_of_8 16. Jan 2007 14:48

Re: Aus einem Word das High und Low Byte extrahieren
 
...wobei man aber beachten muss, dass wenn x die Adresse ist, das Lo-Byte bei x und das Hi-Byte bei x+1 liegt.

Phantom1 16. Jan 2007 14:54

Re: Aus einem Word das High und Low Byte extrahieren
 
Zitat:

Zitat von SirThornberry
man kann sich auch einfach einen record der gleichen größe erstellen, das ganze auf den Recordtyp casten und dann entsprechend auf die Werte zugreifen. Oder man nimmt die Speicheradresse interpretiert diese als PByte und addiert halt das eine Byte dazu um auf das nächste Byte zu gelangen.

Ich glaube es gibt schon ein TWordRec, kann aber im moment nicht nachschauen.

mfg


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

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