Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Integers, Strings, booleans in BinärDaten converertieren (https://www.delphipraxis.net/106663-integers-strings-booleans-binaerdaten-converertieren.html)

snow 14. Jan 2008 19:03


Integers, Strings, booleans in BinärDaten converertieren
 
Hallo

ich arbeite an folgendem

Ich habe einen typ Deklariert

Delphi-Quellcode:
Type TBinaryObject = array of byte;
dieser besteht nur aus bytes.

ich will nun ein paar convertierungsfunctionen schreiben. Ich dachte an integers, strings(auch dynamische), booleans und Gleitkommazahlen.

nun meine Frage:

Wie kann ich z.b die 4 bytes aus einem integer wert auslesen?

Wie geht das bei dynamischen Strings? da habe ich ja nur einen Zeiger.

gruß snow

PS:// geht das ohne Tstream oder einen Nachfahren von TStream zu verwenden?

mkinzler 14. Jan 2008 19:08

Re: Integers, Strings, booleans in BinärDaten converertieren
 
Zitat:

Wie kann ich z.b die 4 bytes aus einem integer wert auslesen?
Betrachte den speicher eines Intewgers als einen Bytearray oder zerlege mit DIV
Chars sind ja Bytes also sind Strings kein Problem

Dax 14. Jan 2008 19:09

Re: Integers, Strings, booleans in BinärDaten converertieren
 
Es gibt da eine Prozedur namens Move:
Delphi-Quellcode:
procedure Move(const source; const dest; count: Integer);
Damit kannst du beliebige Daten durch die Gegend kopieren, zum Beispiel einen Int-Wert in ein Byte-Array:
Delphi-Quellcode:
Move(intWert, byteArray[offset], sizeof(integer));

Apollonius 14. Jan 2008 19:10

Re: Integers, Strings, booleans in BinärDaten converertieren
 
Natürlich geht das ohne TStream. Und für Wertetypen und statische Arrays, also alles, was kein Zeiger ist, ist das auch ganz einfach:
Delphi-Quellcode:
var IntVar: Integer; Bytes: TBinaryObject;
begin
SetLength(Bytes, SizeOf(IntVar));
Move(IntVar, Bytes[0]);
end;
Und das war es auch schon. Das ist absolut keine Hexerei.
Zitat:

dieser besteht nur aus bytes.
Alles besteht aus Bytes. Du musst dir vor Augen halten, dass alles nur eine Bytefolge ist. Alles andere ist Interpretation! Im Prinzip kannst du dir deine Konvertierungsfunktionen also schenken. Für Strings und dynamische Array funktioniert es genauso wie für Wertetypen, du musst bei Move eben immer das erste Byte als ersten Parameter angeben (bei Strings z.B. s[1]) und bei SetLength die richtige Größe angeben (nicht die mit SizeOf erhaltene).

snow 14. Jan 2008 19:18

Re: Integers, Strings, booleans in BinärDaten converertieren
 
Es ist aber schon schöner, wenn man dem programm nur einen integer wert übergibt, und der rest dann automatisch gemacht wird.

Wie heißt den die gegenprocedure zu Move?
Oder kann ich das array auslesen und in den integer schreiben?

gruß snow

wicht 14. Jan 2008 19:20

Re: Integers, Strings, booleans in BinärDaten converertieren
 
Zitat:

Oder kann ich das array auslesen und in den integer schreiben?
Richtig.

Apollonius 14. Jan 2008 19:22

Re: Integers, Strings, booleans in BinärDaten converertieren
 
Move ist Move und fertig Ende. Move bewegt einen Speicherblock, von wo do willst wohin du willst. Also exakt das selbe mit umgedrehten Parametern zum Auselesen.
Und deine Funktion kannst du für Wertetypen so gestalten, dass du als zweiten Parameter die Größe übergibst. Da wünscht man sich schon fast Makros wie in C.

snow 14. Jan 2008 19:49

Re: Integers, Strings, booleans in BinärDaten converertieren
 
um mir ein wenig arbeit zu ersparen hab ich anstatt integer mal ordinal genommen.

Sollte ja auch funktionieren, aber wenn ich eine funktion deklariere mit Ordinal dann...

Delphi-Quellcode:
function InttoBin(ord : ordinal):TBinaryObject;
Zitat:

[Fehler] JTBinaryConvert.pas(9): E2003 Undefinierter Bezeichner: 'ordinal'
woran liegts?

gruß snow

Apollonius 14. Jan 2008 19:50

Re: Integers, Strings, booleans in BinärDaten converertieren
 
Den Typ Ordinal gibt es nicht. Er ist nur ein Hilfstyp bei einigen Funktionen, die bereits vom Compiler umgesetzt werden.

snow 14. Jan 2008 19:53

Re: Integers, Strings, booleans in BinärDaten converertieren
 
Ich kann also keiner function einen parameter vom typ ordinal übergeben?

und wie macht dass dann inc(X : Ordinal);

gruß snow


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:30 Uhr.
Seite 1 von 3  1 23      

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