AGB  ·  Datenschutz  ·  Impressum  







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

PByte als String (möglichst ohne kopieren)

Ein Thema von Meta777 · begonnen am 9. Feb 2011 · letzter Beitrag vom 9. Feb 2011
Antwort Antwort
Meta777

Registriert seit: 8. Sep 2004
Ort: Magdeburg
248 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

PByte als String (möglichst ohne kopieren)

  Alt 9. Feb 2011, 18:04
Delphi-Version: 7
Tach Allerseits,

ich habe ein Variable vom Typ PByte (LPData) und eine dazugehörige Längenangabe (FLength).
Ich möchte den PByte über eine getAsString() als String zurückgeben.
Bisher habe ich folgendes versucht:
-Als PAnsiChar typcasten - Geht nicht weil bei FLength +1 nicht immer #0 steht
-var s: String absolute LPData - geht oft aber nicht immer. Manchmal AV bei Adresse 00000000 (Referenzzählung?¿)

Momentan kopiere ich die bytes wie folgt:
Delphi-Quellcode:
  SetLength(Result, FLength);
  CopyMemory(@Result[1], LPData, FLength);
Wäre doch aber sicher irgendwie möglich das ohne zusätzliche kopiererei zu erledigen, or?

Shalom
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

AW: PByte als String (möglichst ohne kopieren)

  Alt 9. Feb 2011, 18:09
Delphi-Quellcode:
function GetAsString:string;
begin
  LPData := ...
  FLength := ..
  SetString(Result, LPData, FLength);
end;
SetString gibt's schon ewig und wird doch immer übersehen.
Andreas
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#3

AW: PByte als String (möglichst ohne kopieren)

  Alt 9. Feb 2011, 18:31
Ich glaube das geht ganz einfach nicht, denn:
  • Bei einem String muss die Länge vor dem eigentlichen Pointer stehen; bei deinem Pointer nicht erfüllt.
  • Ein PChar muss nullterminiert sein; bei dir ebenfalls nicht erfüllt. Übrigens: Wenn ein PChar in einen String konvertiert wird, wird der Inhalt auch kopiert (schau mal in der System.pas bei _LStrFromPCharLen)
[edit]
@shmia: Dabei wird der Inhalt allerdings auch kopiert.
[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#4

AW: PByte als String (möglichst ohne kopieren)

  Alt 9. Feb 2011, 19:27
Delphi-Referenz durchsuchenSetString

In SetString(Result, LPData, FLength); ist quasi dein SetLength+Copy-Code drin verbaut.

Aber Kopieren wirst du oder ein fremder Code immer irgendwie müssen.



Und bitte für das Result einen AnsiString verwenden, denn dein deine Bytes sind ja wohl ANSI (1 Byte pro Zeichen).
Oder halt UTF8String, wenn es sich um derartige Daten handelt.
(falls du mal irgendwann auf einen neuere unicodenutzenden Compiler umsteigst)

[edit]
Ups, Shmia hab ich irgendwie garnicht gesehn, bzw. falsch gesehn.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 9. Feb 2011 um 19:31 Uhr)
  Mit Zitat antworten Zitat
Meta777

Registriert seit: 8. Sep 2004
Ort: Magdeburg
248 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: PByte als String (möglichst ohne kopieren)

  Alt 9. Feb 2011, 19:58
Ich glaube das geht ganz einfach nicht...
dachte ich mir schon.
  Mit Zitat antworten Zitat
Meta777

Registriert seit: 8. Sep 2004
Ort: Magdeburg
248 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: PByte als String (möglichst ohne kopieren)

  Alt 9. Feb 2011, 20:02
Und bitte für das Result einen AnsiString verwenden...
Ja, ist schon in Plannung, es wird noch ne GeAs(Wide-/Unicode)String geben wenn die PByte eben unicode-daten representieren.
  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 11:28 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