AGB  ·  Datenschutz  ·  Impressum  







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

2 Word zu einer Single

Ein Thema von TeronG · begonnen am 5. Mai 2010 · letzter Beitrag vom 6. Mai 2010
Antwort Antwort
Benutzerbild von TeronG
TeronG

Registriert seit: 19. Jul 2004
Ort: München
960 Beiträge
 
Delphi 2007 Professional
 
#1

2 Word zu einer Single

  Alt 5. Mai 2010, 14:40
Hallo

Ich habe das Problem über einen Modbus einen Real auszulesen.
Da der Modbus keine Real mag habe ich einfach die Gleitkommazahl (32bit) in 2 Words (a 16bit) Zerlegt und übertrage einfach diese.

Nun ist mein Problem, das ich die in Delphi nicht wieder zusammen und dann in eine real/float/Single bekomme.

Einfach mal das 2te Word nach links schieben (shl 16) und dann das Erste dazuaddieren und zu einer Single machen klappt ja schon aber dann habe ich nur eine sehr große Ganzzahl und nicht meine real ... *gruebel*

Das selbe Problem musste ich schon mal in C# lösen ... da gabs so nen schönen BitConverter hat Delphi sowas auch!?

Habt ihr da ne idee wie das klappen könnte?
龍 Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie.
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#2

Re: 2 Word zu einer Single

  Alt 5. Mai 2010, 14:44
Ich würde das per absolute lösen

Delphi-Quellcode:
procedure Bla;
var
  MyInt : Integer;
  MySingle : Single absolute MyInt;
begin
  MyInt := (Word1 shl 16) + Word2;
  //et voila ... MySingle hat den gewünschten Wert
end;
Hintergrund: Durch die absolute-Direktive stehen beide Variablen im Speicher an der gleichen Stelle.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Benutzerbild von TeronG
TeronG

Registriert seit: 19. Jul 2004
Ort: München
960 Beiträge
 
Delphi 2007 Professional
 
#3

Re: 2 Word zu einer Single

  Alt 5. Mai 2010, 15:00
Thanks
Cool ...
Und ich habe schon befürchtet ich müsse (manuel) Pointer verbiegen oder gar das Single bitweise setzen.
龍 Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie.
  Mit Zitat antworten Zitat
Benutzerbild von guinnes
guinnes

Registriert seit: 28. Feb 2007
Ort: Bottrop
265 Beiträge
 
Delphi 5 Enterprise
 
#4

Re: 2 Word zu einer Single

  Alt 5. Mai 2010, 15:15
Oder als VariantenRecord :

Delphi-Quellcode:
Type
  TWordSingle = Record
    case Integer of
      1 : (Words : Array[0..1] of Word);
      2 : (SingleValue : Single);
  end;
....

WordSingle.Words[0] := Word1;
WordSingle.Words[1] := Word2;
Result := WordSingle.SingleValue;
Glückauf
  Mit Zitat antworten Zitat
Benutzerbild von TeronG
TeronG

Registriert seit: 19. Jul 2004
Ort: München
960 Beiträge
 
Delphi 2007 Professional
 
#5

Re: 2 Word zu einer Single

  Alt 5. Mai 2010, 15:25
Klappt beides recht fein.

Interesanterweise wird 12,34 in 12,3400001525879 umgewandelt.
Was mich (beim REAL) nicht wirklich verwundert stört.
Mit dem BitConverter habe ich allerdings ein 12,34 zurückbekommen ... ob da wohl einer rundet. -.-"
龍 Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: 2 Word zu einer Single

  Alt 5. Mai 2010, 16:00
Single und eigentlich alle Fließkommatypen runden nunmal alle, bedingt durch ihre interne Darstellung.

Und so schwer ist das mit den Pointern nun auch nicht.
Delphi-Quellcode:
var L: LongWord;
  S: Single;

S := PSingle(@L)^;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von TeronG
TeronG

Registriert seit: 19. Jul 2004
Ort: München
960 Beiträge
 
Delphi 2007 Professional
 
#7

Re: 2 Word zu einer Single

  Alt 6. Mai 2010, 08:43
Naja .. schwer mag das nicht sein aber ..
a) mag ich Pointer eigentlich nicht und
b) habe ich wegen a keine übung/erfahrung mit pointern.
龍 Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie.
  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 07:08 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