|
|
4 Bytes wieder in eine REAL wandeln |
|
Nyquist |
Forum-Fortgeschrittener
|
|
Beiträge: 60
|
|
|
|
Anmeldedatum: 19.11.07
|
|
|
|
Wohnort: Laupheim
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 03.12.2007, 15:34
Titel: 4 Bytes wieder in eine REAL wandeln
|
|
Ich bins nochmal
ich habe mit einem Programm eine REAL Zahl(32-Bit) zerstückelt in 4 mal Byte und erhalte in Matlab jetzt ein Feld mit 4 Zahlen.
Kann mir von euch jemand sagen wie ich die 4 Bytes zu einer Real Zahl zusammenbekomme
bsp. Zahl 1000.20
dann kommt in Matlab an 205 12 122 68
jetzt sollte irgendwie die obige Zahl wieder rauskommen
Vielen Dank schonmal
_________________
Mit freundlcihem Gruß
Nyquist
|
|
|
|
|
keloid |
Forum-Century
|
|
Beiträge: 216
|
|
|
|
Anmeldedatum: 04.10.07
|
|
|
|
Wohnort: ---
|
|
|
|
Version: 7.5.0.342 (R2007b)
|
|
|
|
|
|
Verfasst am: 03.12.2007, 16:23
Titel:
|
|
Wenn Du noch posten könntest, wie die Zahl in diesem Programm zerlegt wird, wäre es vielleicht einfacher.
So spontan hab ich leider keine Vermutung.
Edit: Schau mal auf http://www.tfh-berlin.de/~kempfer/skript_c/Kap04.html, vielleicht hilft Dir das weiter.
Ich vermute, dass "REAL" nichts anderes als ein "float" unter anderen Programmiersprachen wie z.B. C ist.
Dann müsstest Du die vier Bytes wieder in Binärdarstellung umwandeln, aneinanderhängen und anhand der im Link dargestellten Weise separieren.
1. Bit für Vorzeichen (1 = negativ, 0 = positiv)
2. bis 9. Bit für den Exponenten (2^(E-127))
10. bis 32. Bit für die Mantisse, also 1+ (10.Bit)*1/2^1 + (11.Bit)*1/2^2 + ... + (32.Bit)*1/2^23.
|
|
|
Nyquist |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 60
|
|
|
|
Anmeldedatum: 19.11.07
|
|
|
|
Wohnort: Laupheim
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 03.12.2007, 16:46
Titel:
|
|
das mach ich mit CoDeSys
pMatlabBuffer geht dann zu Matlab
und wie kann ich diese vier Zahlen in Matlab als Binär uahl anzeigen lassen bzw. alle zusammenhängen das ist mir noch ein bisschen unklar.
Vielen Dank
_________________
Mit freundlcihem Gruß
Nyquist
|
|
|
Christoph |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 03.12.2007, 18:47
Titel:
|
|
Versuch mal
typecast(uint8([205 12 122 68]), 'single')
|
|
|
Nyquist |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 60
|
|
|
|
Anmeldedatum: 19.11.07
|
|
|
|
Wohnort: Laupheim
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 04.12.2007, 08:51
Titel:
|
|
Danke hat super funktioniert
_________________
Mit freundlcihem Gruß
Nyquist
|
|
|
Nyquist |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 60
|
|
|
|
Anmeldedatum: 19.11.07
|
|
|
|
Wohnort: Laupheim
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 04.12.2007, 16:24
Titel:
|
|
Hallo christoph
ich hab festgestellt das die typecast funktion ab einer zerstückelten Real die größer als 1024 nicht mehr funktioniert.
ist die begrenzt???
ich sollte nämlich zahlen im ganzen realbereich (32Bit) wieder wandeln können
Danke
_________________
Mit freundlcihem Gruß
Nyquist
|
|
|
Christoph |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 04.12.2007, 17:45
Titel:
|
|
Das kann eigentlich nicht an der typecast-Funktion liegen. Vielleicht liegen deine Real-Werte doch nicht imselben Binärformat vor wie Matlab das gerne hätte. Kannst du mal ein konkretes Beispiel posten? Also die Ausgangszahl und die 4 Bytes, die du bekommst?
|
|
|
keloid |
Forum-Century
|
|
Beiträge: 216
|
|
|
|
Anmeldedatum: 04.10.07
|
|
|
|
Wohnort: ---
|
|
|
|
Version: 7.5.0.342 (R2007b)
|
|
|
|
|
|
Verfasst am: 05.12.2007, 09:07
Titel:
|
|
Wichtig ist, dass das letzte Byte (im bisherigen Beispiel die 68) nicht 255 und nicht 127 ist. Zumindest erzeugt Matlab dann bei mir ein NaN.
Ansonsten kann ich aber Zahlen zwischen -1.7e38 und 1.7e38 erzeugen, scheint also wirklich nicht an typecast zu liegen.
|
|
|
Nyquist |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 60
|
|
|
|
Anmeldedatum: 19.11.07
|
|
|
|
Wohnort: Laupheim
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 05.12.2007, 11:13
Titel:
|
|
hallo Jungs,
ich hab jetzt auch viel getestet. Also es liegt definitiv nicht an Matlab sondern an meiner Schnittstelle die manchmal die empfangenen ASCII werte falsch interpretiert
Trotzdem danke für eure Mühe
_________________
Mit freundlcihem Gruß
Nyquist
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|