Delphi-PRAXiS
Seite 2 von 3     12 3      

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)

Apollonius 14. Jan 2008 19:56

Re: Integers, Strings, booleans in BinärDaten converertieren
 
Das habe ich doch geschrieben: Inc wird vom Compiler umgesetzt. Wenn du dir die CPU-Ansicht anschaust, siehst du, dass keine Funktion Inc aufgerufen wird.

snow 14. Jan 2008 20:13

Re: Integers, Strings, booleans in BinärDaten converertieren
 
Und wie kann ich dann einen integer wert übergeben wenn ich noch nicht seine breite weis?

es macht ja schon einen unterschied ob ich ein Byte oder 4 byte speicher benutze.

Delphi muss doch Enumeric-Typ auch als übergabeparameter akzeptieren.
wenn ich so was hier mache:

Delphi-Quellcode:
 function InttoBin(var Int):TBinaryObject;
begin
SetLength(Result, SizeOf(Int));
Move(Int, result[0], sizeof(Int));
end;
dann sollte ja Int von jedem typ möglich sein.

Aber egal welchern typ ich verwende es kommt beim sizeof(int) Null raus. dabei soll var doch im gegensatz zu Int : integer die direkte variable weitergeben, sodass änderungen von int auch änderungen von der int zugewiesenen Variable hervorrufen.
In meinem Fall wäre auch const interressant aber da kommt auch immer null raus.

gruß snow

mkinzler 14. Jan 2008 20:18

Re: Integers, Strings, booleans in BinärDaten converertieren
 
Eigentlich müsste hier immer 4 rauskommen, da es sich um einen Zeiger handelt. Warum Var?

snow 14. Jan 2008 20:46

Re: Integers, Strings, booleans in BinärDaten converertieren
 
es kommt aber immer Null(mat = 0) raus.

kannst ja mal die function mit nem byte aufrufen. oder mit nem double oder mit ner integer.

egal was kommt. Der PC schpuckt die Null raus.

es muss doch auch ne möglichkeit geben eine integer variable mit dem typ zu übergeben in dem si ist ohne überladen. Der PC weis doch obs nun ein byte ist. dann kann er doch auch die variable auf nen byte anpassen, oder ist delphi nicht so toll wie lange angenommen?

auch ordinäre Typen muss man übergeben können.

Delphi-Quellcode:
function InttoBin(var Int):TBinaryObject;
Wenn ich es so übergebe muss ich doch unterscheiden können von welchem typ meine variable ist.

gruß snow

mkinzler 14. Jan 2008 20:50

Re: Integers, Strings, booleans in BinärDaten converertieren
 
Wie soll das ohne Angabe von einem Typ gehen?

SirThornberry 14. Jan 2008 20:54

Re: Integers, Strings, booleans in BinärDaten converertieren
 
@snow: Bei deinen Vorhaben der letzten Zeit würde ich dir empfehlen über Delphi hinaus zu schauen und dir einfach mal die Grundlagen der Informatik genau zu betrachten. Also nicht irgendwelche Programmiersprachen sondern bitweises rechnen, machienenbefehle etc. So das du weißt was im Rechner eigentlich passiert wenn du einen simplen Delphi befehl nutzt. Wie bereits erwähnt ist Speicher einfach Speicher der in Bits und Bytes vorliegt. Ob du diese Bits als String, Pointer, Integer, Extended etc. interpretierst ist eine Darstellungssache. Und um das zu begreifen ist es glaub ich das beste du weißt was eigentlich im Rechner passiert (und nicht nur was auf dem Bildschirm zu sehen ist oder per Programmiersprache zusammengetippt werden kann)

snow 14. Jan 2008 20:56

Re: Integers, Strings, booleans in BinärDaten converertieren
 
Wenn ich ein byte an eine function mit einem integer-parameter übergebe, dann soll der nicht das byte in einen integer(32) konvertieren sondern als byte belassen und die function durchführen.

genauso bei allen anderen integer-untertypen.

am besten wäre sowiso eine routine die einen ordinären typ annimmt und dann seine größe bestimmt(via sizeof) und dann das ganze via move ins array läd.

gruß snow

mkinzler 14. Jan 2008 21:00

Re: Integers, Strings, booleans in BinärDaten converertieren
 
SizeOf() liefert dir aber nur den Speicherplatz der die Variable belegt = maximaler Wertebereich.
Du könntest überladene Funktionen nehmen

Apollonius 14. Jan 2008 21:07

Re: Integers, Strings, booleans in BinärDaten converertieren
 
Delphi-Quellcode:
procedure WasAuchImmer(const Variable; Size: Cardinal);
Anders geht es nicht. Punkt aus. Du kannst innerhalb der Routine nicht mehr feststellen wie groß die Variable ist, weil diese Information nicht übergeben wird. Also übergib diese Information per Hand. Oder du überlädtst dich tot.

snow 14. Jan 2008 21:12

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

SizeOf() liefert dir aber nur den Speicherplatz der die Variable belegt = maximaler Wertebereich.
Du könntest überladene Funktionen nehmen
ja das würde mir ja reichen aber...

Delphi-Quellcode:
function InttoBin(X : integer):TBinaryObject;
begin
SetLength(Result, SizeOf(X));
Move(X, result[0], sizeof(X));
end;
wenn ich diese function mit dieser routine hier aufrufe....

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var int : byte;
bin : TBinaryObject;
begin
int:=244;
bin:=inttobin(int);
end;
dann hab ich als sizeof(X) immer 4, weil das byte voher in einen integer32 umgewandelt wird. Dabei gehen 3 bytes lehr aus. Obwohl der programmer ja eigendelich int schon als byte deklariert hat.

Der programmer nimmt also an, dass int maximal 255 groß wird. Warum also immer 4 Bytes verwenden.

gruß snow

PS:// das mag so klingen als ob ich bei programmen bytes zählen würde. Zwar macht es bei Gbyte-Festplatten nix aus ob jetz 4 oder 1 Byte benutz wird, aber wie heisst es so schön: Die Menge machts. Oder : Wer den Pennig/Cent nicht ehrt dem ist auch die D-mark/Euro nix wert.


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