![]() |
TBytes in String umwandeln und umgekehrt mit Indy 10
Hallo zusammen,
ich habe folgendes Problem. Ich schicke von einem "TIdTCPClient" ein Array of Byte (TBytes) an einen Server mit dem Befehl:
Delphi-Quellcode:
Da ich anscheind beim Server kein Array of Byte empfangen kann, wandel ich es beim Client vorher in ein String um.
TCPClient.IOHandler.WriteLn(BytesToString(TCPSendMsg));
Diesen String lese ich beim Server ein:
Delphi-Quellcode:
Jetzt liegt mir das array of Bytes als String vor aber ich brauche wieder ein array.
with AContext.Connection.IOHandler do
begin InputMsg := ReadLn ('', 1000); end; Wie bekomme ich das hin? Gibt es eine umkehrfunktion zu BytesToString? Danke im voraus. MFG Alex |
Re: TBytes in String umwandeln und umgekehrt mit Indy 10
ein String ist indirekt auch ein Array of Byte. Es stehen eben mehrere bytes hintereinander.
Dementsprechend genügt es das Ziel (Array oder String) auf die benötigte Speichergröße mit SetLength zu setzen und dann mit move den Speicher einfach zu kopieren. Array zu String:
Delphi-Quellcode:
String zu Array
SetLength(DeinString, Length(DeinArray));
move(DeinArray[0], DeinString[1], Length(DeinArray));
Delphi-Quellcode:
SetLength(DeinArray, Length(DeinString));
move(DeinString[1], DeinArray[0], Length(DeinString)); |
Re: TBytes in String umwandeln und umgekehrt mit Indy 10
Stimmt, da war ja was :-)
Danke, geht :-) |
Re: TBytes in String umwandeln und umgekehrt mit Indy 10
Hallo,
wenn keine Null-Werte im Byte-Array vorkommen, dann macht Delphi das alles selbständig:
Delphi-Quellcode:
Wenn aber Null-Werte vorkommen, dann kann eine Wandlung von String in Array und zurück - egal wie man es macht - zu hässlichen Fehlern führen.
type
TIdBytes = array of Byte; var a: TIdBytes; s: string; begin s := String(a); a := TIdBytes(s); end; Zitat:
Grüße vom marabu |
Re: TBytes in String umwandeln und umgekehrt mit Indy 10
Hallo Marabu,
also ReadBytes finde ich nicht im Server. Wo hast du das gesehen? MFG Alex |
Re: TBytes in String umwandeln und umgekehrt mit Indy 10
Hallo Alex,
ReadBytes() ist eine Methode von TIdIoHandler - wie die von dir verwendete Methode ReadLn() auch. Freundliche Grüße |
Re: TBytes in String umwandeln und umgekehrt mit Indy 10
Zitat:
da der marabu sich irgendwie immer Gedanken macht, bevor er was postet, kannst Du eigentlich immer davon ausgehen, dass er sich auf das von Dir verwendete Beispiel bezieht (oder explizit sagt, wo Du welche Funktion findest). Deshalb einfach mal beim TIdIOHandler nachschauen (den Du oben benutzt), der kennt ReadBytes laut Indy10-Doku. Gruß Der Unwissende [edit] kein roter Kasten, hm, hast Du es halt doppelt :wink: [/edit] |
Re: TBytes in String umwandeln und umgekehrt mit Indy 10
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich teste auch meistens die Sachen die mir gepostet werden und wie ihr im Screenshot seht, gibt es KEIN ReadBytes. Daher wollte ich wisse, woher ihr diese Funktion habt?! MFG Alex |
Re: TBytes in String umwandeln und umgekehrt mit Indy 10
Mein Fehler. Sorry
Die Funktion gibt es :-) Danke nochmals. MFG Alex |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:06 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