AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Die ord() Funktion

Ein Thema von J0hnD03 · begonnen am 4. Mär 2008 · letzter Beitrag vom 4. Mär 2008
Antwort Antwort
J0hnD03

Registriert seit: 4. Mär 2008
2 Beiträge
 
#1

Die ord() Funktion

  Alt 4. Mär 2008, 17:40
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 !
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Die ord() Funktion

  Alt 4. Mär 2008, 17:49
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:
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
umgekehrt geht es natürlich auch das du den speicher einer zahl als zeichen interpretierst und einer neuen Variablen zuweist:
zeichen := char(65); //ist glaub ich ein große A
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.545 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Die ord() Funktion

  Alt 4. Mär 2008, 17:50
Hallo, Willkommen in der 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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Die ord() Funktion

  Alt 4. Mär 2008, 17:51
Diese Funktion liefert dir den Asciicode eines Zeichens.
Markus Kinzler
  Mit Zitat antworten Zitat
J0hnD03

Registriert seit: 4. Mär 2008
2 Beiträge
 
#5

Re: Die ord() Funktion

  Alt 4. Mär 2008, 18:13
vielen dank
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.415 Beiträge
 
Delphi XE5 Professional
 
#6

Re: Die ord() Funktion

  Alt 4. Mär 2008, 18:43
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.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Die ord() Funktion

  Alt 4. Mär 2008, 20:00
Zitat von generic:
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.
bist du dir sicher?

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:
type
  TMyEnum = (me0, me1, me2, me50 = 50, me51);
[...]
showmessage(inttostr(ord(me50)));
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Hawkeye219

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

Re: Die ord() Funktion

  Alt 4. Mär 2008, 21:10
Hallo Jens,

Zitat von SirThornberry:
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.
Man könnte es auch so interpretieren: me50 steht an der 51. Stelle, du wolltest aber nicht alle Werte mit einem Namen versehen:

Delphi-Quellcode:
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;
Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Die ord() Funktion

  Alt 4. Mär 2008, 22:12
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Die ord() Funktion

  Alt 4. Mär 2008, 23:02
...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.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  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 10:46 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