![]() |
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.
|
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:
dann sollte ja Int von jedem typ möglich sein.
function InttoBin(var Int):TBinaryObject;
begin SetLength(Result, SizeOf(Int)); Move(Int, result[0], sizeof(Int)); end; 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 |
Re: Integers, Strings, booleans in BinärDaten converertieren
Eigentlich müsste hier immer 4 rauskommen, da es sich um einen Zeiger handelt. Warum Var?
|
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:
Wenn ich es so übergebe muss ich doch unterscheiden können von welchem typ meine variable ist.
function InttoBin(var Int):TBinaryObject;
gruß snow |
Re: Integers, Strings, booleans in BinärDaten converertieren
Wie soll das ohne Angabe von einem Typ gehen?
|
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)
|
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 |
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 |
Re: Integers, Strings, booleans in BinärDaten converertieren
Delphi-Quellcode:
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.
procedure WasAuchImmer(const Variable; Size: Cardinal);
|
Re: Integers, Strings, booleans in BinärDaten converertieren
Zitat:
Delphi-Quellcode:
wenn ich diese function mit dieser routine hier aufrufe....
function InttoBin(X : integer):TBinaryObject;
begin SetLength(Result, SizeOf(X)); Move(X, result[0], sizeof(X)); end;
Delphi-Quellcode:
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.
procedure TForm1.Button1Click(Sender: TObject);
var int : byte; bin : TBinaryObject; begin int:=244; bin:=inttobin(int); end; 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. |
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