![]() |
Re: 4 Bytes als Float betrachten
@alzaimar: so brauchst du aber immer zwei Variablen die zwischendurch auch mal möglicherweise verschiedene "Werte" haben können.
Außerdem müssen die vier Bytes direkt hintereinander im Speicher liegen, sonst geht das schief. |
Re: 4 Bytes als Float betrachten
@SnuffMaster23: Das ist schon klar, aber anstatt sich einen mit irgenwelchen Funktionen von japanischen Foren abzubrechen, dachte ich mir, ich poste mal die knappe Variante. Dessenungeachtet soll damit klar werden, das man einfach die 4 Bytes direkt in ein Single reinblastern kann.
Was allerdings dein Einwand mit den Variablen, die verschiedene Werte annehmen können, meinst, ist mir schleierhaft. Der Sinn von Variablen ist doch der, das sie... verschiedene Werte annehmen können. Nun egal. Ist eh trivial. |
Re: 4 Bytes als Float betrachten
Also ich fänds schon praktischer wenn ich die Single-Variable schreiben und dann direkt die Bytes entnehmen kann und umgekehrt.
Das geht eben bei der record-Variante weils ein und derselbe Speicher ist. Verschiedene Variablen muss man immer vorher syncronisieren ;) Und nebenbei, ich wär auch ohne japanische Foren drauf gekommen, aber da stands schon da^^ |
Re: 4 Bytes als Float betrachten
@alle
Hallo also die Recordvariante von Amateurprofi ist genau das was ich gesucht habe, einfach anzuwenden und man muss keine Typkonvertierung durchführen, da sie ja schon im Record liegen. Also danke nochmal!! |
Re: 4 Bytes als Float betrachten
die Variante mit dem varianten Record ist (meiner Meinung nach) die beste. Eine weitere Variante wäre mit Pointern:
Delphi-Quellcode:
var
lDeinSingle: Single; begin PByte(Cardinal(@lDeinSingle) + 0)^ := Byte4; PByte(Cardinal(@lDeinSingle) + 1)^ := Byte3; PByte(Cardinal(@lDeinSingle) + 3)^ := Byte2; PByte(Cardinal(@lDeinSingle) + 4)^ := Byte1; |
Re: 4 Bytes als Float betrachten
Man könnte auch einfach ein array of Byte und nen simplen Cast nehmen:
Delphi-Quellcode:
Uli.
procedure Test;
var bytes: array[0..3] of Byte; i: Integer; procedure WriteIt; var i: Integer; begin Write(Single(bytes): 5: 5, '= ('); for i := 0 to 2 do Write(bytes[i], ', '); Writeln(bytes[3], ')'); end; begin Single(bytes) := Pi; WriteIt; for i := 0 to 3 do bytes[i] := 0; WriteIt; bytes[0] := 219; bytes[1] := 15; bytes[2] := 73; bytes[3] := 64; WriteIt; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:26 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