Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dezimal zu floating hex 8 byte ? (https://www.delphipraxis.net/166822-dezimal-zu-floating-hex-8-byte.html)

BBoy 1. Mär 2012 13:49

Delphi-Version: 2010

Dezimal zu floating hex 8 byte ?
 
Ich habe eine Zahl: 1776
diese möchte ich in einer Binärdatei suchen. Finde diese aber nicht wenn ich sie einfach in Hex umwandle F006
Habe nun herausgefunden das die zahlen in der Datei als: Floating Point value, Double 8 byte gespeichert sind, also so: 00 00 00 00 00 C0 9B 40 < dies entspricht also der 1776

Nun frage ich mich, wie ich zahlen in diese Floating Point Value umwandeln kann so das ich sie in der binärdatei finden kann. Weiß das jemand von euch?

gammatester 1. Mär 2012 14:01

AW: Dezimal zu floating hex 8 byte ?
 
Delphi-Quellcode:
type
  tda = array[0..7] of byte;
const
  beispiel: tda = ($00,$00,$00,$00,$00,$C0,$9B,$40);
var
  x: double;
begin
  x := double(beispiel);
  writeln(x:20:10);
end.
Ergebnis: 1776.0000000000

BBoy 1. Mär 2012 14:05

AW: Dezimal zu floating hex 8 byte ?
 
Danke!
Und der umgekehrte weg?

himitsu 1. Mär 2012 14:05

AW: Dezimal zu floating hex 8 byte ?
 
Zitat:

Und der umgekehrte weg?
Andersrum casten?

Nimm eine Variable (Double) speichere darin deine Zahl
und über @variable kommst du an deren binäre Daten. :roll:

Records mit varianten Teilen sind auch sehr beliebt.

Oder über die Delphi-Syntax:
Delphi-Quellcode:
type
  tda = array[0..7] of byte;
var
  x: double;
  b: tda absolute x; // selben Speicher wie x benutzen

b := beispiel;
writeln(x:20:10);
Egal was man setzt, das andere wird quasi mit verändert.

gammatester 1. Mär 2012 14:11

AW: Dezimal zu floating hex 8 byte ?
 
Zitat:

Zitat von BBoy (Beitrag 1153846)
Danke!
Und der umgekehrte weg?

Delphi-Quellcode:
type
  tda = array[0..7] of byte;
var
  x: double;
  i: integer;
begin
  x := 1776;
  for i:=0 to 7 do write(tda(x)[i]:4);
  writeln;
end.
Ausgabe: 0 0 0 0 0 192 155 64, wenn Du's Hex brauchst, mußt Du halt noch inttohex zwischenschalten.

BBoy 1. Mär 2012 14:13

AW: Dezimal zu floating hex 8 byte ?
 
cool, danke für die schnelle Hilfe!

BBoy 2. Mär 2012 10:46

AW: Dezimal zu floating hex 8 byte ?
 
etwas zu früh gefreut. ich verwende das letzte von gammatester aber in einer prozedur. Beim compilieren kommt da immer "operator oder semikolon fehlt". Leider verstehe ich den code nicht um ihn anzupassen.
Wie müsste den Code sein damit er in einer prozedur funktioniert und das Ergebnis als hex in einem edit feld steht?
Danke!

himitsu 2. Mär 2012 11:00

AW: Dezimal zu floating hex 8 byte ?
 
Delphi-Quellcode:
var
  D: Double;
  S: string;
Delphi-Quellcode:
@D
ist der Zeiger auf die binären Daten der Variable.
Dazu liest du dir einfach mal Delphi-Referenz durchsuchenBinToHex durch und schon hat man eine ordentlich Lösung.

Delphi-Quellcode:
D := 123.465;

SetLength(S, SizeOf(D) * 2); // zwei Zeichen pro Byte
BinToHex(D, PChar(S), SizeOf(D)); // oder BinToHex(@X, PChar(S), SizeOf(X));

Edit1.Text := S;

Bummi 2. Mär 2012 11:15

AW: Dezimal zu floating hex 8 byte ?
 
oder nochmals gekapselt:
Delphi-Quellcode:
Function GetAsHexString(Var X;Size:Integer):AnsiString;
begin
  SetLength(Result,Size*2);
  BinToHex( x,PAnsiChar(Result),Size);
end;

procedure TForm2.Button2Click(Sender: TObject);
var
 x:Integer;
 y:Double;
begin
  x := 255+255*256;
  Showmessage(GetAsHexString(x,SizeOf(x)));
  y := 1776;
  Showmessage(GetAsHexString(y,SizeOf(y)));
end;

BBoy 2. Mär 2012 11:18

AW: Dezimal zu floating hex 8 byte ?
 
@himitsu super, vielen dank.
Jetzt funktioniert alles :)


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