Delphi-PRAXiS

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

Muetze1 16. Jan 2007 15:48

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

Zitat von 3_of_8
Nein, Low/High geben den Maximal- und Minimalwert für einen Typen zurück.

richard_boderich hatte nichts von diesen Funktionen geschrieben :warn:

3_of_8 16. Jan 2007 15:56

Re: Aus einem Word das High und Low Byte extrahieren
 
Hat er wohl, er hat seinen Beitrag danach editiert.

QuickAndDirty 16. Jan 2007 16:17

Re: Aus einem Word das High und Low Byte extrahieren
 
@Muetze: Sich zu vertun wäre nicht so peinlich wie das jetzt :hi:

Muetze1 16. Jan 2007 16:22

Re: Aus einem Word das High und Low Byte extrahieren
 
Das ist mir sowas von Schnuppe, aber für dumme Kommentare bist du ja anscheinend auch zu haben...

QuickAndDirty 16. Jan 2007 16:29

Re: Aus einem Word das High und Low Byte extrahieren
 
Danke schön.
Ich ziehe meinen Hut, Muetze.

Dax 16. Jan 2007 16:40

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.

Da sind variante Records aber schöner.. :)
Delphi-Quellcode:
type
  TWordByteConversion = packed record
    case Integer of
      0: (TheWord: Word);
      1: (High, Low: Byte);
  end;

3_of_8 16. Jan 2007 16:46

Re: Aus einem Word das High und Low Byte extrahieren
 
Aber auch da muss man das Little Endian Format beachten:

Delphi-Quellcode:
type
  TWordByteConversion = packed record
    case Integer of
      0: (TheWord: Word);
      1: (Low, High: Byte);
  end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:40 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