Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   IdTelnet - Empfangene Daten anzeigen (https://www.delphipraxis.net/182485-idtelnet-empfangene-daten-anzeigen.html)

user0815 28. Okt 2014 14:00

IdTelnet - Empfangene Daten anzeigen
 
Hallo,

wie kann ich Daten lesbar anzeigen die ich per "IdTelnetDataAvailable(Sender: TIdTelnet; const Buffer: TArray<System.Byte>" erhalte ?
Wenn ich Befehle per Putty sende so kann ich Antwort in Klarschrift lesen...

const Buffer: TArray<System.Byte> :?:

sx2008 28. Okt 2014 20:39

AW: IdTelnet - Empfangene Daten anzeigen
 
Im Unicode Zeichensatz gibt es für die nichtdruckbaren Steuerzeichen #$00 - #$1F recht nette Ersatzzeichen:
http://en.wikipedia.org/wiki/Unicode_control_characters
Natürlich muss der verwendete Font diese Zeichen enthalten sonst werden die nicht angezeigt.
Der Font sollte ein monospaced Font sein.

Du benötigst also eine Funktion, die ein Byte in ein Unicodezeichen transformiert:
Delphi-Quellcode:
function Byte2Unicodechar(b:System.Byte):char;
begin
   if(b >=0 and b < 32)
   begin
      // Umsetzung nach U+240x
      return chr(b + $2400);   // ungetestet da keine aktuelle Delphiversion vorh.
   end
   else
   begin
      // direkt byte -> char
      return chr(b);
   end;
end
Dann noch eine zweite Funktion die ein TArray<System.Byte> in einen String übersetzt und dabei obige Funktion benützt.
Das ist im Prinzip nur eine For-Schleife.
Im Ergebnisstring dann noch in Blöcke von 32 Zeichen unterteilen und zeilenweise in ein TMemo schreiben.

Sir Rufo 29. Okt 2014 00:47

AW: IdTelnet - Empfangene Daten anzeigen
 
Da der TE aber XE2 hat kann man auch sehr schön http://docwiki.embarcadero.com/Libra...ding.GetString benutzen

user0815 29. Okt 2014 07:39

AW: IdTelnet - Empfangene Daten anzeigen
 
Ich konnte es jetzt nochmal testen, die Zeichen werden so in Klarschrift ausgegeben:

Delphi-Quellcode:
procedure TForm1.IdTelnetDataAvailable(Sender: TIdTelnet; const Buffer: TArray<System.Byte>);
var
  s : String;
begin
  SetString(s, PAnsiChar(@Buffer[0]), length(Buffer));
  // ...
end;

@Sir Rufo: Das hatte ich versucht, da kam bei mir nur Zeichen Kauderwelsch.

Delphi-Quellcode:
s := TEncoding.Unicode.GetString(Buffer);
gibt die selben Zeichen aus wie:
Delphi-Quellcode:
SetString(s, PWideChar(@Buffer[0]), length(Buffer) div 2);
DANKE !


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:40 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