AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dezimal zu floating hex 8 byte ?

Ein Thema von BBoy · begonnen am 1. Mär 2012 · letzter Beitrag vom 2. Mär 2012
Antwort Antwort
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#1

Dezimal zu floating hex 8 byte ?

  Alt 1. Mär 2012, 14:49
Delphi-Version: 2010
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?
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#2

AW: Dezimal zu floating hex 8 byte ?

  Alt 1. Mär 2012, 15:01
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
  Mit Zitat antworten Zitat
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#3

AW: Dezimal zu floating hex 8 byte ?

  Alt 1. Mär 2012, 15:05
Danke!
Und der umgekehrte weg?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: Dezimal zu floating hex 8 byte ?

  Alt 1. Mär 2012, 15:05
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.

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.
$2B or not $2B
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#5

AW: Dezimal zu floating hex 8 byte ?

  Alt 1. Mär 2012, 15:11
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.
  Mit Zitat antworten Zitat
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#6

AW: Dezimal zu floating hex 8 byte ?

  Alt 1. Mär 2012, 15:13
cool, danke für die schnelle Hilfe!
  Mit Zitat antworten Zitat
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#7

AW: Dezimal zu floating hex 8 byte ?

  Alt 2. Mär 2012, 11:46
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!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

AW: Dezimal zu floating hex 8 byte ?

  Alt 2. Mär 2012, 12:00
Delphi-Quellcode:
var
  D: Double;
  S: string;
@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;
$2B or not $2B

Geändert von himitsu ( 2. Mär 2012 um 12:04 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#9

AW: Dezimal zu floating hex 8 byte ?

  Alt 2. Mär 2012, 12:15
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;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
BBoy

Registriert seit: 17. Jan 2007
418 Beiträge
 
Delphi 10 Seattle Professional
 
#10

AW: Dezimal zu floating hex 8 byte ?

  Alt 2. Mär 2012, 12:18
@himitsu super, vielen dank.
Jetzt funktioniert alles
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:32 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