AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Integers, Strings, booleans in BinärDaten converertieren
Thema durchsuchen
Ansicht
Themen-Optionen

Integers, Strings, booleans in BinärDaten converertieren

Ein Thema von snow · begonnen am 14. Jan 2008 · letzter Beitrag vom 14. Jan 2008
Antwort Antwort
Seite 1 von 3  1 23      
snow

Registriert seit: 28. Jun 2007
277 Beiträge
 
#1

Integers, Strings, booleans in BinärDaten converertieren

  Alt 14. Jan 2008, 19:03
Hallo

ich arbeite an folgendem

Ich habe einen typ Deklariert

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?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

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

  Alt 14. Jan 2008, 19:08
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
Markus Kinzler
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#3

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

  Alt 14. Jan 2008, 19:09
Es gibt da eine Prozedur namens Move: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:Move(intWert, byteArray[offset], sizeof(integer));
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#4

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

  Alt 14. Jan 2008, 19:10
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).
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
snow

Registriert seit: 28. Jun 2007
277 Beiträge
 
#5

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

  Alt 14. Jan 2008, 19:18
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
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#6

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

  Alt 14. Jan 2008, 19:20
Zitat:
Oder kann ich das array auslesen und in den integer schreiben?
Richtig.
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#7

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

  Alt 14. Jan 2008, 19:22
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
snow

Registriert seit: 28. Jun 2007
277 Beiträge
 
#8

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

  Alt 14. Jan 2008, 19:49
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...

function InttoBin(ord : ordinal):TBinaryObject;
Zitat:
[Fehler] JTBinaryConvert.pas(9): E2003 Undefinierter Bezeichner: 'ordinal'
woran liegts?

gruß snow
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#9

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

  Alt 14. Jan 2008, 19:50
Den Typ Ordinal gibt es nicht. Er ist nur ein Hilfstyp bei einigen Funktionen, die bereits vom Compiler umgesetzt werden.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
snow

Registriert seit: 28. Jun 2007
277 Beiträge
 
#10

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

  Alt 14. Jan 2008, 19:53
Ich kann also keiner function einen parameter vom typ ordinal übergeben?

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

gruß snow
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:53 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