AGB  ·  Datenschutz  ·  Impressum  







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

StrToChar???????

Ein Thema von foxy · begonnen am 17. Jan 2003 · letzter Beitrag vom 21. Jan 2003
Antwort Antwort
Seite 2 von 4     12 34      
lodda

Registriert seit: 6. Dez 2002
65 Beiträge
 
Delphi 5 Standard
 
#11
  Alt 17. Jan 2003, 16:13
Der Typ char ist nicht einstellig. Er ist geanu 1 Byte groß und geht damit von 0 bis 255
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#12
  Alt 17. Jan 2003, 16:18
@Chakotay1308: Ich muss Dich erst einmal enttäuschen. Du hast da ein arges Verstädnisproblem.

Wenn ein String so definiert wäre
Delphi-Quellcode:
type
  String = array[0..255] of char;
, dann könntest Du immer noch auf die 100. Stelle mit StringName[100] zugreifen. Ohne Problem. Zusätzlich: Ein Char ist ein Byte groß, dass heisst, ess kann eine beliebigen Wert zwischen #0 und einschließlich #255 einnehmen.

Nun zum "AS-IS"
Ein String ist ein Pointer auf einen Block mit folgender Definition
Delphi-Quellcode:
type
  PStrRec = ^StrRec;
  StrRec = packed record
    refCnt: Longint;
    length: Longint;
  end;
Das dahinter die eigentlichen Daten stehen, versteckt Delphi vor uns, wie freundlich

Der ShortString hat keine direkte Definition, ist von der Logik aber wie folgt aufgebaut:
Delphi-Quellcode:
type
  // ObereGrenze liegt im Bereich von 1..255 (Standard=255)
  ShortString: array[0..ObereGrenze] of AnsiChar;
Du kannst Dir eigene Shortstrings definieren. Ein Datentyp ShortString der Länge 56 Zeichen wäre
Delphi-Quellcode:
type
  MyShortString56 = string[56];
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
HAF68k
(Gast)

n/a Beiträge
 
#13
  Alt 17. Jan 2003, 17:10
das ist der eintrag von der delphi hilfe zum thema
mit der ORD-funktion.
Code:
uses Dialogs;
type

   Colors = (RED,BLUE,GREEN);

var

  S: string;
 begin
   S := 'BLUE has an ordinal value of ' + IntToStr(Ord(BLUE)) + #13#10;
   S := S + 'The ASCII code for "c" is ' + IntToStr(Ord('c')) +  ' decimal';
   MessageDlg(S, mtInformation, [mbOk], 0);
 end;
ich hoffe du hast das gemeint.
ansonsten meldest dich halt
  Mit Zitat antworten Zitat
Sebastian Nintemann
(Gast)

n/a Beiträge
 
#14
  Alt 17. Jan 2003, 18:00
Noch einmal zum Thema einstellig:
Ein Char ist insofern einstellig, als das es nur einen Character (Buchstaben) aufnehmen kann, nämlich genau einen aus dem 256 (0..255) Zeichen umfassenden ASCII Alphabet. Zahlenmäßig gesehen ist ein Char (ein Byte) also keineswegs einstellig sondern kann Zahlen im Bereich 0..255 aufnehmen.

Gruß, Sebastian
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#15
  Alt 17. Jan 2003, 19:05
Hi,

da muß ich meinen Senf für die Nachwuchskünstler eben auch noch dazu geben. Auch um die Verwirrung wenigstens vollständig zu machen.

Zitat von Grotesquery:
Zahlenmäßig gesehen ist ein Char (ein Byte) also keineswegs einstellig sondern kann Zahlen im Bereich 0..255 aufnehmen.
Da werden keine Zahlen aufgenommen. Ein Char ist schon einstellig, weil es eben nur ein Buchstabe ist Wie soll man aber 256 Buchstaben in einem einstelligen Wert unterbringen ? Ganz einfach : in einer Oktalzahl (=1 Byte). Die größte wäre dann eben 11111111, wobei die 1 je Stelle verdoppelt wird. 8 Einsen sind dann 1+2+4+8+16+32+64+128 = 255 im Dezimalsystem zuzüglich der Null, insgesamt also 256.

Stelle Dir a..z vor, dann hätte a den Wert 1 und z den Wert 26. Dann nimmst Du noch die Großbuchstaben, dann sinds schon 52. Dann noch die Umlaute, Zahlen, Punkt, Komma, blablabla. Dann sind es weit über 100. Deshalb sind die Zahlen mit Ihrem ASCII-Wert ("Oktalwert") gespeichert un belegen genau ein Byte. Maximal kriegst Du also 256 Zahlen in einer 8-stelligen Binärzahl unter. Da es aber auch Chinesen gibt, mußte das auf 65XXX erweitert werden. Das ist dann Ansi und die Codepages etc., da blick ich selber nicht genau durch.

Gruß
Hansa
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#16
  Alt 17. Jan 2003, 19:22
Zitat von Hansa:
Maximal kriegst Du also 256 Zahlen in einer 8-stelligen Binärzahl unter. Da es aber auch Chinesen gibt, mußte das auf 65XXX erweitert werden. Das ist dann Ansi und die Codepages etc., da blick ich selber nicht genau durch.
Merkt man
Ne, quatsch, ich kenn mich auch nicht so aus, aber meines Wissens ist ANSI die 8bit-Erweiterung von ASCII (7Bit). Die 16bit-Variante mit 65536 Zeichen heißt Unicode (das ist dann für die Chinesen ). Daneben gibt es noch Multibyte-Zeichensätze, die benutzen auf jeden Fall 7Bit, und falls das achte Bit einen bestimmten Wert hat, wird das nächste Byte auch noch mitbenutzt. Ist also komplizierter als DualByte (UniCode), aber platzsparender, da nicht immer zwei Bytes benötigt werden.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#17
  Alt 17. Jan 2003, 19:25
@Hansa
Ein Byte oder Char ist keine "Oktalzahl", da sich dieser Begriff auf das Oktalsystem bezieht. (Dezimalsystem: 0..9, Binaärsystem: 0..1; Hexadezimalsystem: 0..9,A..F; Oktalsystem: 0..7)

Genau genommen sind die Pascaltypen Char und Byte gleich. Intern (in Assembler) macht Delphi absolut keinen Unterschied zw. Byte und Char. Lediglich für uns Programmierer gibt es einen Unterschied.
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#18
  Alt 17. Jan 2003, 19:36
Hi,

Zitat von Chewie:
Merkt man
Ne, quatsch, ich kenn mich auch nicht so aus, aber meines Wissens ist ANSI die 8bit-Erweiterung von ASCII (7Bit). Die 16bit-Variante mit 65536 Zeichen heißt Unicode (das ist dann für die Chinesen ).
Unicode und Ascii: Für mich fast dasselbe. ASCII hat aber definitiv 8 Bit (vielleicht reden wir aneinander vorbei, es gibt auch extended ASCII, dann meine ich eben das)!!! für eben 256 verschiedene Werte.

Mit sieben Bit komme ich nur auf 128. Verdoppele ich ab 256 (8 Bit)wieder Achtmal und addiere dann gibt das 65XXX.

Gruß
Hansa
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#19
  Alt 17. Jan 2003, 19:43
Hi Sakura,

Zitat von sakura:
Genau genommen sind die Pascaltypen Char und Byte gleich. Intern (in Assembler) macht Delphi absolut keinen Unterschied zw. Byte und Char. Lediglich für uns Programmierer gibt es einen Unterschied.
Ja, so ist das. Der Compiler setzt das Zeichen in seinen Ascii-Wert (oder sonstwas zurück). Mit diesem wird dann gerechnet, (SHL, SHR usw.). D.h., da werden die Funktionen ORD, CHR usw. automatisch aufgerufen, um uns die Arbeit zu ersparen. Ich wollte das lediglich einmal in Erinnerung rufen. Denn dadurch kommen auch Rundungsdifferenzen etc. zustande. Gerechnet wird eben letztenendes nur auf Basis von 0 und 1. Also Strom AUS oder Strom EIN.

Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#20
  Alt 17. Jan 2003, 19:51
Zitat von Hansa:
Ja, so ist das. Der Compiler setzt das Zeichen in seinen Ascii-Wert (oder sonstwas zurück)
Der Compiler setzt gar nichts zurück. Wenn der Compiler es nicht verhindern würde, dann könntest Du folgendes tun
Delphi-Quellcode:
var
  B: Byte;
  C: Char;
...
B := 65;
C := 'A';
if B = C then
  ...
Der Lauf würde True ergeben, nur der Compiler erlaubt den Vergleich nicht!
Delphi-Quellcode:
var
  B: Byte;
  C: Char;
...
B := 65;
C := 'A';
asm
  Mov AL, B
  Mov AH, C
  CMP AL, AH
  JNZ @@OOPS
  ...
@@OOPS:
Das würde ohne Probleme gehen und True ergeben. Intern sind Byte und Char IDENTISCH.

Zitat von Hansa:
D.h., da werden die Funktionen ORD, CHR usw. automatisch aufgerufen, um uns die Arbeit zu ersparen.
Schlußfolgerung aus oben. Der Compiler macht GAR NICHTS.

Zitat von Hansa:
Denn dadurch kommen auch Rundungsdifferenzen etc. zustande.
Byte Ganzzahln wie Byte und Integer dies sind, kommt es nicht zu Rundungsfehlern!
......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 01:02 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