![]() |
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';
![]() |
Re: Eigener String-Typ
Arrays besitzen, soweit ich weiß, doch ebenfalls dieses Byte.
Delphi-Quellcode:
--> das bringt mir da ja nix
const Digits: array[0..9] of Char = '0123456789';
|
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; |
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:
erschien die Länge 10.
const a: array[1..10] of Char = 'Hallo Welt';
|
Re: Eigener String-Typ
Zitat:
Zitat:
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. |
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 |
Re: Eigener String-Typ
Zitat:
Zitat:
Ansonsten: PChar ist genau das, was du willst. |
Re: Eigener String-Typ
Zitat:
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. |
Re: Eigener String-Typ
Zitat:
Zitat:
Pseudocode:
Code:
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.
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; Zitat:
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:
|
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 01:01 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