Autor Beitrag
tinewww
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 13.09.06 13:59 
Hallo,

habe eine Funktion, die mir einen Wert als array [] of byte zurückliefert. Für die weitere Verarbeitung möchte ich diesen Wert aber in eine Stringvariable umwandeln. Gibt es dafür eine Funktion? Oder wie kann ich das sonst machen?
Chryzler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: Mi 13.09.06 14:04 
Eine Möglichkeit wäre (warscheinlich nicht die Beste) in einer Schleife das ganze Array zu durchlaufen und jedes Byte nacheinander in einen String einzufügen (mittels Chr)
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Mi 13.09.06 14:22 
Hallo,

versuchs so, kann dir aber net garantieren, dass es funktioniert, hab Delphi nicht vor mir:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
//A = Array of Byte
//S = String
  SetLength(S, Length(A) * SizeOf(Byte));
  Move(@S[1], A, Length(S)); //ich weiss net, wie rum die Parameter bei Move sind
Gruß Hape!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Do 14.09.06 00:10 
wulfskin: Fast, anders rum; und Move nimmt keine Pointer.
Statt A würde ich A[0] (bzw. A[Low(A)] für die, die's ganz genau haben wollen; nur für statische Arrays relevant) schreiben, damit's auch bei den dynamischen Arrays klappt. Das @S[1] sollte man noch ersetzen durch Pointer(S)^ bzw. wenn schon S[1], aber das generiert iirc einen Overhead (da der String als Referenz übergeben wird, wird eine Kopie des Strings angefertigt wird, falls der Referenzzeiger grössergleich 2 ist). PChar(S)^ kreiert auch unnötigen Overhead, da das nur bei leeren Strings einen Unterschied macht und bei statischen Arrays keine Grösse 0 gibt (bzw. bei dynamischen Arrays schon, aber dann wird sowieso nichts kopiert und Move macht nichts).
Sowas wie Move(A[Low(A)], Pointer(S)^, Length(S)); wäre eine Lösung. Wenn du sowieso dynamische Arrays hast, dann aus Leserlichkeitsgründen Low(A) durch 0 ersetzen und falls du auf Pointers verzichten willst statt Pointer(S)^ einfach S[1].

;)
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Do 14.09.06 08:03 
Danke phan,

hatte wie gesagt kein Delphi vor mir (jaja, immer diese Ausreden) ;)!

Gruß Hape!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
tinewww Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 14.09.06 10:36 
Vielen Dank! Mit dieser Move - Operation hat das gut funktioniert!!! :D :D :D