Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TBytes in String umwandeln und umgekehrt mit Indy 10 (https://www.delphipraxis.net/97447-tbytes-string-umwandeln-und-umgekehrt-mit-indy-10-a.html)

Alex_ITA01 10. Aug 2007 14:24


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:
TCPClient.IOHandler.WriteLn(BytesToString(TCPSendMsg));
Da ich anscheind beim Server kein Array of Byte empfangen kann, wandel ich es beim Client vorher in ein String um.
Diesen String lese ich beim Server ein:

Delphi-Quellcode:
with AContext.Connection.IOHandler do
begin
  InputMsg := ReadLn ('', 1000);
end;
Jetzt liegt mir das array of Bytes als String vor aber ich brauche wieder ein array.
Wie bekomme ich das hin? Gibt es eine umkehrfunktion zu BytesToString?

Danke im voraus.
MFG Alex

SirThornberry 10. Aug 2007 14:32

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:
SetLength(DeinString, Length(DeinArray));
move(DeinArray[0], DeinString[1], Length(DeinArray));
String zu Array
Delphi-Quellcode:
SetLength(DeinArray, Length(DeinString));
move(DeinString[1], DeinArray[0], Length(DeinString));

Alex_ITA01 10. Aug 2007 14:38

Re: TBytes in String umwandeln und umgekehrt mit Indy 10
 
Stimmt, da war ja was :-)
Danke, geht :-)

marabu 10. Aug 2007 17:21

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:
type
  TIdBytes = array of Byte;

var
  a: TIdBytes;
  s: string;

begin
  s := String(a);
  a := TIdBytes(s);
end;
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.

Zitat:

Zitat von Alex
... Da ich anscheind beim Server kein Array of Byte empfangen kann, wandel ich es beim Client vorher in ein String um. ...

ReadBytes() sieht für mich so aus, wie eine Methode zum Empfangen eines Array of Byte. Und wenn es das nicht gäbe, so wäre die client-seitige Wandlung in einen String auch nicht nötig. Eigentlich geht es immer nur darum, ob man den Daten eine Größenangabe voraus schickt oder einen Delimiter hinten anstellt.

Grüße vom marabu

Alex_ITA01 13. Aug 2007 12:57

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

marabu 13. Aug 2007 13:04

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

Der_Unwissende 13. Aug 2007 13:04

Re: TBytes in String umwandeln und umgekehrt mit Indy 10
 
Zitat:

Zitat von Alex_ITA01
Hallo Marabu,
also ReadBytes finde ich nicht im Server. Wo hast du das gesehen?
MFG Alex

Hi,
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]

Alex_ITA01 13. Aug 2007 13:15

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

Alex_ITA01 13. Aug 2007 13:17

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 07:12 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