Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Prism Binär statt Rückgriff auf Zeichenkodierungen!? (https://www.delphipraxis.net/45275-binaer-statt-rueckgriff-auf-zeichenkodierungen.html)

DerSascha 3. Mai 2005 11:43


Binär statt Rückgriff auf Zeichenkodierungen!?
 
Hallo,

ich habe folgendes Szenario:
Delphi-Quellcode:
TDatenpaket = packed record
  a:Byte;
  b:Int16;
  c:Int32;
  d:Boolean;
end;
Ich möchte nun den Inhalt eines Records diesen Typs übers Netz binär unter .NET senden.
Ich finde eine Reihe von Beispielen die auf Zeichenkodierungen und den damit zugänglichen
GetBytes()-, GetString()-Funktionen, usw. per Socket.Send() verschicken. Das ist für mein
Record meiner Meinung nach ungeeignet, weil nicht gewährleistet ist, dass die Bytes
unverändert bleiben.

Frage: Auf die Gefahr hin das diese blöd klingt, aber wie komme ich an die einzelnen Bytes
der Struktur ohne das Hilfskonstrukt der Stringfunktionen?

Meine derzeitige Lösung sieht so aus, dass ich die Strukturen als Serializable deklariere
und per BinaryFormatter und der Methode GetBytes einen MemoryStream benutze. Das
funktioniert, aber ich möchte das nicht dauerhaft über Serialisierung lösen. Das muß
doch einfacher gehen ... :-).

Gruß,
Sascha

Kedariodakon 3. Mai 2005 11:51

Re: Binär statt Rückgriff auf Zeichenkodierungen!?
 
Hmm ka wie es in .Net ist, aber in D7 würd ich es pie mal daumen so machen:

Du fragst erstmal ab wie groß das Record ist, geht mit Delphi-Referenz durchsuchenSizeOf()
Und dann gehst vom Anfang des Records in Byteschritten bis zum erreichen der Größe durch...

Ich hoffe es hilft ^^

Bye

Bernhard Geyer 3. Mai 2005 12:36

Re: Binär statt Rückgriff auf Zeichenkodierungen!?
 
Zitat:

Zitat von Kedariodakon
Du fragst erstmal ab wie groß das Record ist, geht mit Delphi-Referenz durchsuchenSizeOf()

Wird schon aufgrund des Boolen-Typs nicht gehen, da nicht festgelegt ist wie groß er ist. Unter Win32 wird er (vermutlich) 4 Byte groß sein, unter Win64 8 Byte. Deshalb wird z.B. auch der "File of <Type>"-Zugriff unter VCL.NET nicht mehr unterstützt, da die größen von Basistypen nicht mehr zur Kompilierungszeit bestimmbar sind.

Kedariodakon 3. Mai 2005 12:52

Re: Binär statt Rückgriff auf Zeichenkodierungen!?
 
Zitat:

Zitat von Bernhard Geyer
Wird schon aufgrund des Boolen-Typs nicht gehen, da nicht festgelegt ist wie groß er ist. Unter Win32 wird er (vermutlich) 4 Byte groß sein, unter Win64 8 Byte. Deshalb wird z.B. auch der "File of <Type>"-Zugriff unter VCL.NET nicht mehr unterstützt, da die größen von Basistypen nicht mehr zur Kompilierungszeit bestimmbar sind.

Gut das wuste ich ja nicht :zwinker:
Somit ist es wohl unabwendbar eine Kodierungsfunktion zu schreiben :coder:

Bye

DerSascha 3. Mai 2005 13:03

Re: Binär statt Rückgriff auf Zeichenkodierungen!?
 
Danke für Eure Beiträge!

SizeOf() ist zwar benutzbar, allerdings gibt es immer 0 zurück, was die Aussage von

Bernhard stützt. Weiterhin ist SizeOf im Namespace Borland.Delphi.System, wobei
ich mir hier dann auch nicht sicher wäre, ob das mit einer Verwendung unter
Mono verträglich wäre, selbst wenn SizeOf() funktionieren würde.

Bin für weitere Vorschläge offen ;-).

Gruß,
Sascha

Zitat:

Somit ist es wohl unabwendbar eine Kodierungsfunktion zu schreiben
Klingt gut und wie wäre der Ansatz :-)?


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