![]() |
Die ord() Funktion
Ich möchte euch bitten für nen Anfänger mal die ord() Funktion zu erklären !auch nach dem lesen von einigen erklärungen im inet versteh ich nich so 100%ig was sie macht !
|
Re: Die ord() Funktion
die Ord Function führt einen cast durch. Jetzt denke ich allerdings das du das auch nicht verstehst.
Also: Beim Computer gibt es Datenspeicher und darauf sind Bytes die aneinander gereiht da liegen. Wie man diese jetzt interpretiert ist Sache des Programmierers. Du kannst hintereinander liegende Bytes als String, Wort, Kommazahl, kleine Ganzzahl, große Ganzzahl etc. interpretieren. Und Ord macht nichts anderes als den übergebenen Wert als Ordinalwert (Zahlenwert) zu interpretieren. Wenn du ord also ein 's' übergibst, ist das s ja auch nur ein Byte was in deinem Fall als Buchstabe interpretiert wird aber letztendlich ist es nur eine Ansammlung von Bits. Wenn du ord das s übergibst bekommst du die bits von 's' als zahl interpretiert zurück gegeben. Das gleich kannst du auch durch einen direkten cast erreichen:
Delphi-Quellcode:
umgekehrt geht es natürlich auch das du den speicher einer zahl als zeichen interpretierst und einer neuen Variablen zuweist:
zahl := byte('s'); //ein cast, man sagt das 's' als byte interpretiert werden soll
zahl := ord('s'); //funktionsaufruf - durch compilermagie/optimierung intern auch nur ein cast
Delphi-Quellcode:
zeichen := char(65); //ist glaub ich ein große A
|
Re: Die ord() Funktion
Hallo, Willkommen in der DP :dp: ,
Ord() macht nichts Anderes, als die Zahl auszugeben, die dem angegebenen Zeichen in der ASCII-Tabelle zugeordnet ist. Alternativ kannst Du es auch mal mit Byte() versuchen. |
Re: Die ord() Funktion
Diese Funktion liefert dir den Asciicode eines Zeichens.
|
Re: Die ord() Funktion
vielen dank
|
Re: Die ord() Funktion
ord ist noch einfacher.
ord gibt den index eines eintrages aus eine liste zurück. das kann z.b. der ascii code sein aus der ascii liste. es kann aber auch ein index aus einer einfachen aufzählung sein. |
Re: Die ord() Funktion
Zitat:
Dann müsste folgendes Beispiel eigentlich 3 ausgeben (weil me50 an dritter Stelle steht). Tatsächlich wird aber 50 ausgegeben weil nicht der Index von ord zurück gegeben wird sondern die Bytes des übergebenen Wertes werden als ordinaler Wert interpretiert. Folglich ein ganz normaler cast. Wenn du dir ansiehst was der Compiler generiert, wirst du sogar feststellen das ord(wert) und byte(wert) das gleiche ergibt (eben weil es nur ein einfacher cast ist).
Delphi-Quellcode:
:zwinker:
type
TMyEnum = (me0, me1, me2, me50 = 50, me51); [...] showmessage(inttostr(ord(me50))); |
Re: Die ord() Funktion
Hallo Jens,
Zitat:
Delphi-Quellcode:
Gruß Hawkeye
type
TMyEnum = (me0, me1, me2, me50 = 50, me51); var MySet : set of TMyEnum; begin MySet := [me0..me51]; if (TMyEnum(42) in MySet) then ShowMessage ('surprise'); end; |
Re: Die ord() Funktion
ich wollte sagen das die Aussage das Ord den Index zurück gibt falsch ist. Es wird nirgends mit einer Indextabelle etc. gearbeitet sondern es werdn schlichtweg nur die Bits als Zahl interpretiert. Und das ich bei meinem Enum Werte überspringe ist eigentlich auch falsch. Ein Enum ist nur eine Definition von Constanten die typisiert werden.
Das Enum war nur ein Beispiel. Ich hätte ebenso ein Array of byte nehmen können mit zufälligen Werten. Dort wird auch nicht der Index zurück gegeben wo der Wert im Array steht sondern es wird wieder nur ein cast gemacht. |
Re: Die ord() Funktion
...was dann aber nicht funktionieren würde. Ord() funktioniert nur mit ordinalen Typen. Dazu gehören sämtliche Integer-Typen, Aufzählungen, Chars und (da bin ich mir jetzt nicht ganz sicher) möglicherweise auch Mengen. ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06: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