Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Eigener String-Typ (https://www.delphipraxis.net/62576-eigener-string-typ.html)

Khabarakh 6. Feb 2006 18:46

Re: Eigener String-Typ
 
Jupp, ein Literal hat auch das Längenbyte. Aber was stört dich eigentlich daran :wink: ? Wenn es unbedingt ohne Längenbyte sein soll, kannst du solch eine Konstante deklarieren:
Delphi-Quellcode:
const Digits: array[0..9] of Char = '0123456789';

http://www.luckie-online.de/Develope...zi/Strings.zip

SebE 6. Feb 2006 19:17

Re: Eigener String-Typ
 
Arrays besitzen, soweit ich weiß, doch ebenfalls dieses Byte.

Delphi-Quellcode:
const Digits: array[0..9] of Char = '0123456789';
--> das bringt mir da ja nix

Khabarakh 6. Feb 2006 19:26

Re: Eigener String-Typ
 
Bei dynamischen Arrays mag das vielleicht stimmen, aber wozu sollten statische ein Längenbyte benötigen?
Das funktioniert jedenfalls:
Delphi-Quellcode:
const Digits: array[0..9] of Char = '0123456789';
begin
  if @Digits = @(Digits[0]) then
    ShowMessage('wuppdi');
end;

SebE 6. Feb 2006 19:33

Re: Eigener String-Typ
 
ich hab mir eine eigene Length-Funktion geschrieben, die mir wirklich das erste Byte (eigentlich sind es 4 aber egal) ausgibt.
Beim Testen von:

Delphi-Quellcode:
const a: array[1..10] of Char = 'Hallo Welt';
erschien die Länge 10.

tommie-lie 6. Feb 2006 19:37

Re: Eigener String-Typ
 
Zitat:

Zitat von Khabarakh
Bei dynamischen Arrays mag das vielleicht stimmen, aber wozu sollten statische ein Längenbyte benötigen?

Um die Länge zu bestimmen? So funktioniert Range Checking ;-) Die Information steht halt nur woanders.


Zitat:

Zitat von SebE
Arrays besitzen, soweit ich weiß, doch ebenfalls dieses Byte.

Jein. Nicht an der Position array[0].

Am besten wäre es tatsächlich, wenn du das tun würdest, wozu du schon oft aufgefordert wurdest: zu sagen, was du überhaupt damit willst. Compiler Magic tut leider viele Dinge für dich. PChar dürfte für die Meisten Anwendungen das Mittel deiner Wahl sein, wenn du einfach nur 'n Haufen Zeichen mit Nullterminator im Speicher halten willst.

SebE 6. Feb 2006 19:41

Re: Eigener String-Typ
 
Sagen wir so, ich möchte mein Programm nicht unter Windows laufen lassen.
Soll im RealMode laufen und da möchte ich einfach nur, dass das erste Byte einer Zeichenkette nicht für die Länge veschwendet wird, da das sonst mit den Größen nicht mehr passt.

Das ist halt der Vorteil von C.

naja, ich danke euch trotzdem für eure Hilf

tommie-lie 6. Feb 2006 19:49

Re: Eigener String-Typ
 
Zitat:

Zitat von SebE
Sagen wir so, ich möchte mein Programm nicht unter Windows laufen lassen.
Soll im RealMode laufen

Aha. Und da nimmst du den DCC für? Interessant.

Zitat:

Zitat von SebE
und da möchte ich einfach nur, dass das erste Byte einer Zeichenkette nicht für die Länge veschwendet wird, da das sonst mit den Größen nicht mehr passt.

Welchen Größen? Auch im RealMode hast du mehr als genug Adressraum für ein popeliges Byte pro String (bei ShortStrings). Stell dir vor, es gab damals[tm] auch schon Pascal-Compiler, die das genau so gemacht haben.
Ansonsten: PChar ist genau das, was du willst.

SebE 6. Feb 2006 19:58

Re: Eigener String-Typ
 
Zitat:

Aha. Und da nimmst du den DCC für? Interessant.
Woher nimmst du dir diese Annahme?
Dass hab ich nie gesagt.

natürlich verwende ich FreePascal :roll:
Ich hatte diese Frage anfangs auch einmal im "Programmieren allgemein"-Forum.

Ich wollte eine Art Liste mit konkreten ZeilenLängen für eine Art Screen-Objekt basteln,
welches den Inhalt des Video-Rams managen soll.

Die Liste hat den Sinn, um beim Scrollen immer den aktuellen Inhalt nachzuladen.
Es ist für mich daher einfacher, wenn es eine Möglichkeit gäbe, einen neuen Zeichenkettentyp zu erstellen.

tommie-lie 6. Feb 2006 20:35

Re: Eigener String-Typ
 
Zitat:

Zitat von SebE
Zitat:

Aha. Und da nimmst du den DCC für? Interessant.
Woher nimmst du dir diese Annahme?
Dass hab ich nie gesagt.

Du postest in einem Delphi-Forum ohne weiter zu erwähnen, daß du einen anderen Compiler benutzt. Was sollen wir denken? Daß du in ALGOL programmierst?

Zitat:

Zitat von SebE
Ich wollte eine Art Liste mit konkreten ZeilenLängen für eine Art Screen-Objekt basteln,
welches den Inhalt des Video-Rams managen soll.

Eben, PChar.
Pseudocode:
Code:
var
  lines: array[0..numlines - 1] of PChar;
backbuffer = getmem(linelength * numlines);
for i := 0 to numlines - 1 do
begin
  lines[i] := backbuffer + (i * linelength);
end;
Beschafft dir ein Array mit Zeilen, bei dem jeder Array-Eintrag eine Zeile repräsentiert. Musst nur aufpassen, daß du nicht über das Ende einer Zeile hinwegschreibst, dann landest du nämlich in der nächsten. Für die Architektur wird vorrausgesetzt, daß das erste Byte eines Backbuffers/Videospeichers auch das linke, obere Zeichen ist und anschließend Zeilenweise von links nach rechts und von oben nach unten gelaufen wird.

Zitat:

Zitat von SebE
Die Liste hat den Sinn, um beim Scrollen immer den aktuellen Inhalt nachzuladen.

Ist halt bei PChars mehr Aufwand, weil du Speicher durch die gegend schieben musst und nicht mit Verweisen und der Compiler Magic arbeiten kannst.
Du kannst auch nach wie vor ein array[0..linelength-1] of char nehmen, dann ist die gesamte Zeile eine Entität und nicht nur der Zeiger auf das erste Zeichen. Macht allerdings nur wenig Unterschied im Handling.

Zitat:

Zitat von SebE
Es ist für mich daher einfacher, wenn es eine Möglichkeit gäbe, einen neuen Zeichenkettentyp zu erstellen.

Dafür gibt es kein syntaktisches Element, Strings sind zu einem großen Zeil Compiler Magic pur. Du hast den Quellcode deines Compilers, entweder, du schreibst dir deinen eigenen Zeichenkettentyp in den Compiler und hast dabei den Aufwand, oder du machst es in deiner Anwendung und hast dort den Aufwand. Den deutlich kleineren Aufwand sehe ich in der eigenen Anwendung.


Zitat:

Zitat von SebE
Das ist halt der Vorteil von C.

Warum benutzt du dann nicht C?

SebE 6. Feb 2006 20:56

Re: Eigener String-Typ
 
@tommie-lie:
Danke für deine Bemühungen mit der Liste, doch die steht bereits (fast), außerdem hab ich diese ganz anders aufgebaut (VRAM + Virtueller VRAM).

Ich such(t)e eigentlich nur eine Möglichkeit das erste "String-Byte" auszunutzen", da ich immer versuche jedes Byte zu sparen, wo es geht.
Klingt doof, aber so bin ich eben.

Es hätte mir auch bei bestimmten Dingen geholfen: wenn man mit Pointern arbeitet und dann ist immer dieses eine Byte im Weg.

Warum ich nicht C/C++ nutze -> weil ich dem nicht mächtig bin, außerdem find ich die Sprache Pascal besser (meine Meinung).


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:41 Uhr.
Seite 2 von 3     12 3      

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