Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Konvertierung Byte in String


tinewww - Mi 13.09.06 13:59
Titel: Konvertierung Byte in String
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 - 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 - Mi 13.09.06 14:22

Hallo,

versuchs so, kann dir aber net garantieren, dass es funktioniert, hab Delphi nicht vor mir:

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!


delfiphan - 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 - Do 14.09.06 08:03

Danke phan,

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

Gruß Hape!


tinewww - Do 14.09.06 10:36

Vielen Dank! Mit dieser Move - Operation hat das gut funktioniert!!! :D :D :D