WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Zahl X in binär umwandeln und auf 2 Byte aufteilen, aber WI

 

space
Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 12.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.07.2011, 18:52     Titel: Zahl X in binär umwandeln und auf 2 Byte aufteilen, aber WI
  Antworten mit Zitat      
Hallo Forengemeinde,

ich habe auch mal wieder eine Frage, dieses Mal zum Thema Umrechnung und Zuweisung:

Beispiel:

Ich habe die Zahl 520, diese möchte ich ins Binärsystem umrechnen. Ich habe schon nach int2bin und num2bin gesucht aber nicht wirklich verstanden, ob mir das weiter helfen kann.

Danach möchte ich diese Zahl (bin) auf 2 Byte (2* 8Bit) (HighByte und LowByte) aufteilen und wieder zurück ins dezimal rechnen (bin2dec)!

Kann mir jemand helfen, wie ich die diese Zahl umrechenen kann und sie aufteile??

Vielen Dank im Vorraus!

Gruß
Private Nachricht senden Benutzer-Profile anzeigen


space
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 12.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.07.2011, 19:24     Titel:
  Antworten mit Zitat      
Hallo,

entschuldigt bitte meine Frage, ich habe sie selber lösen können.
5 Minuten länger die HILFE lesen,...

b1 = bitand(bitshift(x,-8,32),255)
b0 = bitand(x,255)


Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
punkNgrind
Forum-Century

Forum-Century


Beiträge: 136
Anmeldedatum: 10.03.11
Wohnort: Hamburg
Version: R2014b
     Beitrag Verfasst am: 10.07.2011, 12:05     Titel:
  Antworten mit Zitat      
du kannst übrigens mit:

Code:


eine Dezimalzahl in eine Binären String umwandeln.

[/code]
Private Nachricht senden Benutzer-Profile anzeigen
 
space
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 12.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2011, 00:09     Titel:
  Antworten mit Zitat      
Hallo Leute,

ich habe eine Erweiterung meiner obigen Problemstellung:
Die Konvertierung von Dec. in Binär und das aufteilen in 2 Byte klappt soweit!
Nun möchte ich aber das genau umgedreht machen. Ich habe 2 Byte die mir 2 Zahlen z.B. binär eine 60 (LowByte) und eine 7(HighByte) zurück geben. Diese möchte ich zu einem "16Bit-block" vereinen und diesen wieder ins Dec. umrechnen. So das der Wert 1852 ausgegeben wird.

Ich komm gerade echt nicht drauf, wie ich das obere umdrehen muss, dass das so funktioniert.

Hoffe mir kann jemand helfen!

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 14.07.2011, 01:41     Titel:
  Antworten mit Zitat      
Hallo space,

In welchem Format liegen die Inputs vor? "binär eine 60" ist mir nicht klar. Wenn es ein Binäre-String ist, kannst Du ihn zunöchst per BIN2DEC in einen DOUBLE umwandeln:
Code:
High = bin2dec('111100');
Low = bin2dec('111');
D = 256*High + Low;

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
space
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 12.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2011, 08:26     Titel:
  Antworten mit Zitat      
Hi Jan,

ich "lese" mit fread(s,2)

dadurch bekomme ich als LowByte eine 60 und HighByte eine 7 (z.B.).
Kann ich per fread nur EIN spezielles Byte auslesen, dass das erste gelesene das LowByte und das zweite das HighByte ist!

Falls das nicht geht, wie mach ich die Zuweisung auf die 2 Variablen, wenn ich mit fread(s,2) lese? Will damit noch weiter rechnen.

Vielen Dank für deine Hilfe!

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 14.07.2011, 09:29     Titel:
  Antworten mit Zitat      
Hallo space,

Zitat:
ich "lese" mit fread(s,2)
dadurch bekomme ich als LowByte eine 60 und HighByte eine 7

Dieser Befehl liest zwei DOUBLEs. Bist Du sicher, dass Du dadurch die HighBytes and LowBytes bekommst??

Zitat:
Kann ich per fread nur EIN spezielles Byte auslesen, dass das erste gelesene das LowByte und das zweite das HighByte ist!

Lies doch mal den Hilfe-Text des FREAD Befehls. Das ist meist effizienter als das Forum zu befragen.

Wenn im File das LowByte zuerst kommt, ist es wahrscheinlich im IEEE-BE-Format geschrieben, also "Big Endian". Dann kannst Du den 16 Bit Integer so einlesen:
Code:
fid = fopen(FileName, 'r', 'ieee-be');
Value = fread(fid, 1, 'uint16')

Das erzeugt automatisch einen DOUBLE Wert. Wenn Du aus irgendwelchen Gründen die einzelnen Bytes brauchst:
Code:
Value = fread(fid, 2, 'uint8=>uint8');

Damit is Value ein [1 x 2] UINT8 Vektor. Um dann den Dezimalwert zu bekommen:
Code:
ValueDec = Value(1) + Value(2) * 256;

Hilft Dir das weiter?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
space
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 12.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2011, 10:14     Titel:
  Antworten mit Zitat      
Hi Jan,

Danke für deine Antowort!

die Hilfe zu fread hatte ich schon gelesen. Da stand aber nur, das ich angeben kann, wieviele Bytes ich auslesen will und nicht ob es möglich ist, ein spezielles zu lesen.

Aber deine Antort hilft mir sehr weiter, danke hierfür! Ich dacht, dass fread nur 1 Byt bzw. 8 Bit lesen kann. Aber das ganz natürlich als ein 16 Bit zu definieren ist einfach und effektiv! Wäre ich nie drauf gekommen!

THX

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 15.07.2011, 00:03     Titel:
  Antworten mit Zitat      
Hallo space,

Und auch ich kann noch etwas aus dem Hilfe-Text von FREAD lernen: Ich hatte behauptet, dass "fread(fid, 2)" zwei DOUBLE liest, also 128 bit. Das ist falsch! Der Default-Wert für die Precision ist 'uchar', so dass der Befehl also doch zwei Bytes liest und diese als DOUBLEs an Matlab zurückgibt.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 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.