Delphi-PRAXiS
Seite 5 von 5   « Erste     345   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   ANSISTRING unter Linux verfügbar ??? (https://www.delphipraxis.net/196723-ansistring-unter-linux-verfuegbar.html)

p80286 16. Jun 2018 12:14

AW: ANSISTRING unter Linux verfügbar ???
 
das
Delphi-Quellcode:
sizeof(ansichar)
ist doch eh überflüssig. Wenn dann müßte es ein
Delphi-Quellcode:
sizeof(char)
sein, da der 8- oder 16-bittig sein kann. Daß dann der
Delphi-Quellcode:
Savestring:String
definiert sein muß, sollte klar sein.

Gruß
K-H

himitsu 16. Jun 2018 16:35

AW: ANSISTRING unter Linux verfügbar ???
 
Ja, ein SizeOf auf einen "festen" Typen, der sich eh niemals ändert und der auch noch 1 ist. das ist schon bissl sinnlos.

Zitat:

Zitat von p80286 (Beitrag 1404956)
Wenn dann müßte es ein
Delphi-Quellcode:
sizeof(char)
sein, .... Daß dann der
Delphi-Quellcode:
Savestring:String
definiert sein muß, sollte klar sein.

Prizipiell richtig, aber gerade das ist total falsch und extrem gefährlich.

Sowas macht man niemals,
ohne beim Lesen nicht alle möglichen Formate zu implementieren und bei Speichern auch das Format mit zu speichern, damit man beim Lesen weiß wie es gelesen werden muß.
Gut, man kann beim Lesen nur Einwas implementieren, aber muß dann einen Fehler werfen, wenn ein unbekanntes/falsche Format kommt.

bernhard_LA 23. Jun 2018 23:47

AW: ANSISTRING unter Linux verfügbar ???
 
was entspricht dann PAnsiChar , wenn ich AnsiChar durch TBytes ersetze ?

Code beispiel


Delphi-Quellcode:

type
  TReadBuffer = record
    BufferBytes: array of Byte;
    procedure clear;
  end;


function BytestoString(BytesBuffer: TReadBuffer): AnsiString;
var
  arraylength: integer;
  s: AnsiString;
begin

  arraylength := high(BytesBuffer.BufferBytes) + 1;
  SetString(s, PAnsiChar(@BytesBuffer.BufferBytes[0]), arraylength);
  Result := s;

end;

jaenicke 24. Jun 2018 03:22

AW: ANSISTRING unter Linux verfügbar ???
 
Wo möchtest du dort jetzt etwas ersetzen? AnsiString durch TBytes? Meinst du das?
Delphi-Quellcode:
type
  TReadBuffer = record
    BufferBytes: array of Byte;
    class operator implicit(const ABuffer: TReadBuffer): TBytes;
    procedure Clear;
  end;

class operator TReadBuffer.implicit(const ABuffer: TReadBuffer): TBytes;
begin
  SetLength(Result, Length(ABuffer.BufferBytes));
  CopyMemory(@Result[0], @ABuffer.BufferBytes[0], Length(ABuffer.BufferBytes));
end;

var
  TestBuffer: TReadBuffer;
  TestBytes: TBytes;
begin
  TestBuffer.BufferBytes := [1,4,5];
  TestBytes := TestBuffer;
  ShowMessage(Format('%d: [%d, %d, %d]', [Length(TestBytes), TestBytes[0], TestBytes[1], TestBytes[2]]));
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:08 Uhr.
Seite 5 von 5   « Erste     345   

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