Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Inhalt eines dynamischen Array in einen String kopieren (https://www.delphipraxis.net/144549-inhalt-eines-dynamischen-array-einen-string-kopieren.html)

oki 10. Dez 2009 14:34


Inhalt eines dynamischen Array in einen String kopieren
 
Hi Leute,

ich entschuldige mich schon mal im Voraus für die Frage. Bei der Suche bin ich wahnsinnig geworden; bekomme alle Threads mit den Stichworten String und Array; einfach zu viel.

Folgende Aufgabe:
Ich habe ein dynamisches Array A : Array of Byte und möchte deren Inhalt in einen String kopieren. Ich stell mich grad zu blöd an. Muss dabei bemerken, dass ich das nicht über eine Schleife sondern mittels move oder Copy mit "einem Ruck" erledigen will.

Mach ich es so:
Delphi-Quellcode:
      SetLength(SData, Length(FReceivedData));
      system.Move(@FReceivedData[0], SData[1], Length(FReceivedData));
      SetLength(FReceivedData, 0);
bekomme ich Fehlermeldungen wie:
Zitat:

[DCC Fehler] USBPort_Classes.pas(357): E2036 Variable erforderlich
Ich hatte eigentlich nicht erwartet, dass ich damit Schwierigkeiten habe, ist aber wohl so. :oops:

Ich denke, hier kann mir sicher einer schnell aus meinem Dilemma helfen.

Dank und Gruß oki

Uwe Raabe 10. Dez 2009 14:40

Re: Inhalt eines dynamischen Array in einen String kopieren
 
Lass doch mal das @ weg:
Delphi-Quellcode:
system.Move(FReceivedData[0], SData[1], Length(FReceivedData));

oki 10. Dez 2009 14:49

Re: Inhalt eines dynamischen Array in einen String kopieren
 
Hi,

dann meckert zwar der Compiler nicht mehr, aber in SData steht nur Müll. Auf jeden Fall nicht das, was in FReceivedData steht.

Gruß Oki

DeddyH 10. Dez 2009 14:55

Re: Inhalt eines dynamischen Array in einen String kopieren
 
Und wenn Du das letzte SetLength einmal weglässt?
Delphi-Quellcode:
SetLength(SData, Length(FReceivedData));
system.Move(FReceivedData[0], SData[1], Length(FReceivedData));
//SetLength(FReceivedData, 0);

Uwe Raabe 10. Dez 2009 14:56

Re: Inhalt eines dynamischen Array in einen String kopieren
 
Zitat:

Zitat von oki
dann meckert zwar der Compiler nicht mehr, aber in SData steht nur Müll. Auf jeden Fall nicht das, was in FReceivedData steht.

Dann gib doch mal folgendes bekannt:

Wie sind FReceivedData und SData deklariert?
Welche Delphi-Version setzt du ein?

oki 10. Dez 2009 15:00

Re: Inhalt eines dynamischen Array in einen String kopieren
 
Hi Leute,

muss grad für 1,5 h weg. Hier noch schnell:

FReceiveData setze ich 0 um die empfangenen Daten zu löschen (hole sie mit Sdata ab). SData ist ein string, den ich mit den Daten als String hochreichen möchte. Manchmal empfange ich nur ASCII.

Gruß oki

p80286 10. Dez 2009 15:01

Re: Inhalt eines dynamischen Array in einen String kopieren
 
Ich hab's mal für mich umgesetzt, so klappt es:

Delphi-Quellcode:
var
  i : integer;
  a1: array of byte;
  s1: string;
begin
  setlength(s1,50);
  setlength(a1,50);
  for i:=0 to 49 do a1[i]:=$20+i;
  move(a1[0],s1[1],50);
  showmessage(s1);
Gruß
K-H

himitsu 10. Dez 2009 15:10

Re: Inhalt eines dynamischen Array in einen String kopieren
 
Wenn FReceivedData ein "Array of Byte" und SData ein "AnsiString" (oder Ähnliches) ist:
Delphi-Quellcode:
SData := AnsiString(Pointer(FReceivedData));
UniqueString(SData);
FReceivedData := nil;
Wobei das mit dem Move eigentlich auch funktionieren sollte :gruebel:
Delphi-Quellcode:
SetLength(SData, Length(FReceivedData));
MoveMemory(@SData[1], @FReceivedData[0], Length(FReceivedData));
FReceivedData := nil;
Bist du ganz sicher, daß "aber in SData steht nur Müll" an diesen Befehlen liegt?

Medium 10. Dez 2009 15:13

Re: Inhalt eines dynamischen Array in einen String kopieren
 
Nur so am Rande: Move ist intern meine ich auch nichts weiter als eine Schleife über Bytes.

Uwe Raabe 10. Dez 2009 15:18

Re: Inhalt eines dynamischen Array in einen String kopieren
 
Zitat:

Zitat von Medium
Nur so am Rande: Move ist intern meine ich auch nichts weiter als eine Schleife über Bytes.

Richtig, nur daß diese Schleife als ein einzelner OpCode realisiert und damit geringfügig schneller als eine ausprogrammierte Schleife ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:25 Uhr.
Seite 1 von 2  1 2      

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