Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Problem mit #0 im String (https://www.delphipraxis.net/133226-problem-mit-0-im-string.html)

QuickAndDirty 5. Mai 2009 09:14

Re: Problem mit #0 im String
 
Stimmt ja.
gibt es keinen offiziellen standard wie man 0 in C Strings verpackt?
Funktioniert '^A' ?

Medium 5. Mai 2009 09:20

Re: Problem mit #0 im String
 
Steuerzeichen sind Steuerzeichen. Selbst WENN #0 einen String nicht abschneiden würde, gäbe es kein darstellbares Zeichen dafür, wie auch für die meisten der unteren ASCII Zeichen. Sie sind eben nicht dafür gedacht, waren es auch nie und nirgends. End of Story.
Daher ist es auch seit Anbeginn aller Tage ein no-go Binärdaten in Strings zu halten. Dafür gibt es Arrays und Streams.

Bernhard Geyer 5. Mai 2009 09:26

Re: Problem mit #0 im String
 
Zitat:

Zitat von QuickAndDirty
gibt es keinen offiziellen standard wie man 0 in C Strings verpackt?

Gibt es. Es geht einfach nicht! Ein C-String kann kein #0 beinhalten. Was du meinst wäre Escapen. Und dort gibt es viele Lösungsmöglichkeiten. Einer ist. z.b. die Darstellung als Hex für den gesamten String. WinMerge als alternative nimmt hierfür ein eigenes Glyph, Hex-Editoren stellen alle Zeichen < #$20 z.B. teilweise nur als "." dar, ...

Satty67 5. Mai 2009 09:50

Re: Problem mit #0 im String
 
Zur Visualisierung kann man sich ja auch schnell was basteln:
Delphi-Quellcode:
function VisualizeASCII(Text : String; SpaceToo : Boolean) : String;
const
  ASCII_Codes : array[#0..#31] of String = (
    '<NUL>', '<SOH>', '<STX>', '<ETX>', '<EOT>', '<ENQ>', '<ACK>', '<BEL>',
    '<BS>', '<TAB>', '<LF>', '<VT>', '<FF>', '<CR>', '<SO>', '<SI>', '<DLE>',
    '<DC1>', '<DC2>', '<DC3>', '<DC4>', '<NAK>', '<SYN>', '<ETB>', '<CAN>',
    '[i]', '<SUB>', '<ESC>', '<FS>', '<GS>', '<RS>','<US>');
  DEL_Code = '<DEL>';
  SPACE_Code = '<SPACE>';
var
  i : Integer;
begin
  Result := '';
  for i := 1 to Length(Text) do
    case Text[i] of
      #0..#31 : Result := Result + ASCII_Codes[Text[i]];
      #32  : if SpaceToo then Result := Result + SPACE_Code
               else Result := Result + ' ';
      #127 : Result := Result + DEL_Code;
    else
      Result := Result + Text[i];
    end;
end;
Bei Bedarf auch #32 als <SPACE> ...€: Done
€2: 127 ist DEL nicht ESC :oops:

generic 5. Mai 2009 15:32

Re: Problem mit #0 im String
 
Zitat:

Zitat von R2009
Wie machen das eigentlich die "C" Freaks?

Die Übertragen/Empfangen Bytes und keine Strings.
Es wird nur zur Einfachheit das oft als String dargestellt.

Gelegentlich werden auch andere Endzeichen genutzt. Aber das kommt auf das Protokoll an.

QuickAndDirty 5. Mai 2009 15:42

Re: Problem mit #0 im String
 
Zitat:

Zitat von Bernhard Geyer
Zitat:

Zitat von QuickAndDirty
gibt es keinen offiziellen standard wie man 0 in C Strings verpackt?

Gibt es. Es geht einfach nicht! Ein C-String kann kein #0 beinhalten. Was du meinst wäre Escapen. Und dort gibt es viele Lösungsmöglichkeiten. Einer ist. z.b. die Darstellung als Hex für den gesamten String. WinMerge als alternative nimmt hierfür ein eigenes Glyph, Hex-Editoren stellen alle Zeichen < #$20 z.B. teilweise nur als "." dar, ...

Man könnte auch gleich alles base64 codiert übertragen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:02 Uhr.
Seite 3 von 3     123   

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