Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Strings und Ansistrings, Nullterminiert? (https://www.delphipraxis.net/166685-strings-und-ansistrings-nullterminiert.html)

Bernhard Geyer 24. Feb 2012 21:02

AW: Strings und Ansistrings, Nullterminiert?
 
Zitat:

Zitat von himitsu (Beitrag 1152749)
String-Resourcen sind schon immer Unicode (seit WinNT)

Nee. Auch unter Win9x waren die Ressourcen Unicode (Sonst hätten wir keine Ressourcen-Dateien mit Chinesisch auch unter Win9x auf einem deutschen System laden können :-))

himitsu 24. Feb 2012 22:03

AW: Strings und Ansistrings, Nullterminiert?
 
Davor wußte ich halt nicht, aber seit NT und vorallem jetzt sind sie es auf jeden Fall. :duck:

NickelM 25. Feb 2012 02:38

AW: Strings und Ansistrings, Nullterminiert?
 
Zitat:

Zitat von himitsu (Beitrag 1152745)
@NickelM: Wie gesagt, Delphi-String enthält schon eine #0 am Ende. Zusätzlich zum enthaltenen Text liegt diese hinter dem letzen Zeichen.

Ausnahme ist nur der Delphi-Referenz durchsuchenShortString / String[x].
WideString ist kein Delphi-String. Da drin ist ein OLE-String der WinAPI gekapselt.

Delphi-Strings haben das schon automatisch? Okay gut zuwissen. Man lernt halt nie aus.

WideString ist kein Delphi-String? Auch nicht in den neuen Delphi Versionen?
Bei Delphi 5 entspricht WideString einem Delphi 2009+ String, zumindest hat WideString dort 2 Bytes je Zeichen. Und ein Delphi 5 String hat 1 Byte je Zeichen, da noch nicht Unicode "standard" war.
Ist nicht eigentlich der String-Typ der neuen Versionen, genauso wie ein WideString in den neuen Versionen. Sie haben doch beide 2 Byte je Zeichen, genauso wie UnicodeString. Neueren Delphis haben WideString,UnicodeString,AnsiString und String. String und AnsiString ist klar. Aber die anderen stammen doch vom gleichen Typ. Sind die nur noch wegen der Kompatibilität vorhanden, oder? Weil Delphi 5 kennt er nur WideString, AnsiString und String.
Noch eine Frage, sorry wenn ich grad ein bischen vom Thema abkomme :oops:, wie meinst du das mit OLE-String der WinAPI????

Bernhard Geyer 25. Feb 2012 07:26

AW: Strings und Ansistrings, Nullterminiert?
 
Zitat:

Zitat von NickelM (Beitrag 1152770)
WideString ist kein Delphi-String? Auch nicht in den neuen Delphi Versionen?

Es ist schon, aber er ist am OleString angelehnt und mit ihm kompatible. Ist eingeführt worden um COM/ActiveX in Delphi zu unterstützen.
Gegenüber dem AnsiString und dem ab D2009 vorhandenen Unicodestring hat er keine Referenzzählung

Zitat:

Zitat von NickelM (Beitrag 1152770)
Bei Delphi 5 entspricht WideString einem Delphi 2009+ String, zumindest hat WideString dort 2 Bytes je Zeichen.

Ab D2009+ ist der String ein Unicodestring und hat noch ein paar Features mehr gegenüber einem Widestring.
Im Unicodestring wird auch gespeichert welche Codierung der eigentliche String hat.

himitsu 25. Feb 2012 08:20

AW: Strings und Ansistrings, Nullterminiert?
 
Der WideString ist und war immer "nur" eine Weiterleitung/Kapselung von Funktionen der oleaut32.dll
MSDN-Library durchsuchenSysAllocStringLen
MSDN-Library durchsuchenSysReAllocStringLen
MSDN-Library durchsuchenSysFreeString
MSDN-Library durchsuchenSysStringLen

Der UnicodeString ab Delphi 2009 ist dageben genauso aufgebaut, wie der AnsiString.

Das ist der Aufbau des UnicodeString (sowie des AnsiString):
Ab D2009 wurde nur noch das codePage und elemSize eingeführt, für das besch* umgesetzte StringChecking.
Delphi-Quellcode:
StrRec = packed record
  codePage: Word;
  elemSize: Word = SizeOf(WideChar);
  refCnt: Integer;
  length: Integer;
  data: array[0..x] of WideChar;
  null: Char = #0;
end;
Der interne String-Zeiger zeigt auf data[0] oder auf NIL, bei einem Leerstring.

SyntaxXx 25. Feb 2012 14:52

AW: Strings und Ansistrings, Nullterminiert?
 
Es funktioniert einfach nicht,ich kann machen was ich will.
ich habe jetzt so ziemlich alles probiert was nur geht.

Ich bin nochmal alles durch gegangen.

Also:

Meine Funktion "AddString" benötigt also einen nullterminierten String.
Also dachte ich mir, dann muss das Result meiner XOR Verschlüsselung ja ein Ansistring sein.

Also habe ich einfach das Result der XOR Funktion als Ansistring deklariert, aber immernoch der gleiche Fehler.

Jetzt weiß ich wirklich nicht weiter.
Es ist doch alles so, wie es zu sein hat oder nicht?

Luckie 25. Feb 2012 15:33

AW: Strings und Ansistrings, Nullterminiert?
 
Kann es sein, dass der Fehler in deinem Verschlüsselungscode liegt?

SyntaxXx 25. Feb 2012 15:57

AW: Strings und Ansistrings, Nullterminiert?
 
Code:
function DoXOr(Buffer :string; Key : integer) : ansistring;
var
  i,c,x :Integer;
begin
  for i := 1 to Length(Buffer) do
  begin
    c := Integer(Buffer[i]);
    x := c xor Key;
    Result := Result + Char(x);
  end;

end;

Buffer ist mein String und Key ist der Verschlüsselungsinteger, welchen bei mir 15 ist.

NickelM 25. Feb 2012 17:00

AW: Strings und Ansistrings, Nullterminiert?
 
Versuch mal stat Char, AnsiChar. Sollte eigentlich kein Unterschied machen, da Delphi soviel ich weis es umcasten müsste.

implementation 25. Feb 2012 17:14

AW: Strings und Ansistrings, Nullterminiert?
 
Und versuch mal Byte statt Integer.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:37 Uhr.
Seite 2 von 3     12 3      

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