AGB  ·  Datenschutz  ·  Impressum  







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

Eigener String-Typ

Ein Thema von SebE · begonnen am 6. Feb 2006 · letzter Beitrag vom 6. Feb 2006
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#11

Re: Eigener String-Typ

  Alt 6. Feb 2006, 19:46
Jupp, ein Literal hat auch das Längenbyte. Aber was stört dich eigentlich daran ? Wenn es unbedingt ohne Längenbyte sein soll, kannst du solch eine Konstante deklarieren:
const Digits: array[0..9] of Char = '0123456789';
http://www.luckie-online.de/Develope...zi/Strings.zip
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
SebE

Registriert seit: 31. Jul 2004
Ort: Chemnitz
316 Beiträge
 
Delphi 7 Personal
 
#12

Re: Eigener String-Typ

  Alt 6. Feb 2006, 20:17
Arrays besitzen, soweit ich weiß, doch ebenfalls dieses Byte.

const Digits: array[0..9] of Char = '0123456789'; --> das bringt mir da ja nix
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#13

Re: Eigener String-Typ

  Alt 6. Feb 2006, 20:26
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;
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
SebE

Registriert seit: 31. Jul 2004
Ort: Chemnitz
316 Beiträge
 
Delphi 7 Personal
 
#14

Re: Eigener String-Typ

  Alt 6. Feb 2006, 20:33
ich hab mir eine eigene Length-Funktion geschrieben, die mir wirklich das erste Byte (eigentlich sind es 4 aber egal) ausgibt.
Beim Testen von:

const a: array[1..10] of Char = 'Hallo Welt'; erschien die Länge 10.
Sebastian
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#15

Re: Eigener String-Typ

  Alt 6. Feb 2006, 20:37
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 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.
  Mit Zitat antworten Zitat
SebE

Registriert seit: 31. Jul 2004
Ort: Chemnitz
316 Beiträge
 
Delphi 7 Personal
 
#16

Re: Eigener String-Typ

  Alt 6. Feb 2006, 20:41
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
Sebastian
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#17

Re: Eigener String-Typ

  Alt 6. Feb 2006, 20:49
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 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.
  Mit Zitat antworten Zitat
SebE

Registriert seit: 31. Jul 2004
Ort: Chemnitz
316 Beiträge
 
Delphi 7 Personal
 
#18

Re: Eigener String-Typ

  Alt 6. Feb 2006, 20:58
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
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.
Sebastian
  Mit Zitat antworten Zitat
tommie-lie
(Gast)

n/a Beiträge
 
#19

Re: Eigener String-Typ

  Alt 6. Feb 2006, 21:35
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 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 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 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 von SebE:
Das ist halt der Vorteil von C.
Warum benutzt du dann nicht C?
  Mit Zitat antworten Zitat
SebE

Registriert seit: 31. Jul 2004
Ort: Chemnitz
316 Beiträge
 
Delphi 7 Personal
 
#20

Re: Eigener String-Typ

  Alt 6. Feb 2006, 21:56
@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).
Sebastian
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 08:39 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