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

umwandlung String in matrix

 

Chris2011

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.08.2011, 14:43     Titel: umwandlung String in matrix
  Antworten mit Zitat      
Hallo zusammen!

Ich hab da ein kleines Problem. Ich will einen String in der Form: x=00 00 00 04 00 0F 00 1F 00 17 00 29 00 11 00 0A 00 00 umwandeln, damit ich eine 3x3-Matrix bekomme.

Am Ende sollte eine Matrix in der Form A=[0000 0004 000F; 001F 0017 0029; 0011 000A 0000] rauskommen.

Bei den Zahlen handelt es sich dabei um Hex-Zahlen.

MfG Chris


eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 09.08.2011, 15:33     Titel:
  Antworten mit Zitat      
Ein numerisches Array kann keine Buchstaben beinhalten. Ein Cellarray wäre dafür geeignet, allerdings sind dann die Einträge nach wie vor als String abgespeichert.
Private Nachricht senden Benutzer-Profile anzeigen
 
Chris2011

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.08.2011, 15:42     Titel:
  Antworten mit Zitat      
Also dieses x kommt aus einer Datei mit value <13x10 cell>.
Daraus hab ich dann ein Feld genommen, in dem meine Daten stehen und hab dann das x mit value <1x1 cell> bekommen.

und daraus will ich jetzt eben eine 3x3 matrix haben und diese dann von hex in dezimal umwandeln.
 
Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 09.08.2011, 15:57     Titel:
  Antworten mit Zitat      
HEX2DEC funktioniert für CELL. Sind die Zwischenschritte nötig?

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Chris2011

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.08.2011, 16:02     Titel:
  Antworten mit Zitat      
mit hex2dec bekomm ich das irgendwie nicht hin.

also ganz am ende soll eben eine 3x3 matrix mit dezimalzahlen dastehen. in welcher reihenfolge die schritte erfolgen ist im prinzip egal!
 
eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 09.08.2011, 16:50     Titel:
  Antworten mit Zitat      
Code:
A=[0000 0004 000F; 001F 0017 0029; 0011 000A 0000]


ist aber keine dezimale Form. Und wie bereits gesagt, hex2dec() macht genau das, was du benötigst. Siehe auch cellfun().
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 09.08.2011, 17:23     Titel:
  Antworten mit Zitat      
Geht bestimmt auch noch einfacher, aber es funktioniert immerhin.

Code:

x={'00 00 00 04 00 0F 00 1F 00 17 00 29 00 11 00 0A 00 00'};
m = 1;
% zunächst Leerzeichen entfernen und immer 4 Bit in eine Zeile von vec
for i=1:6:length(x{1})-4
    vec(m,1:2) = x{1}(i:i+1);
    vec(m,3:4) = x{1}(i+3:i+4);
    m = m + 1;
end
% Umwandlung von hex in dezimal und in 3x3 Matrix speichern
M = zeros(3,3);
for i=1:3*3
    M(i) = hex2dec(vec(i,:));
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Chris2011

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.08.2011, 08:31     Titel:
  Antworten mit Zitat      
Vielen Dank DSP!

Es funktioniert wunderbar! Würdest du mir bitte noch diesen Teil erklären?

% zunächst Leerzeichen entfernen und immer 4 Bit in eine Zeile von vec
for i=1:6:length(x{1})-4
vec(m,1:2) = x{1}(i:i+1);
vec(m,3:4) = x{1}(i+3:i+4);
m = m + 1;
end

Chris
 
eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 10.08.2011, 08:35     Titel:
  Antworten mit Zitat      
Bedeutet nichts anderes als:

Code:
reshape(strrep(x{1}, ' ', ''), [], 4)


--> Hex-Werte untereinander in ein char-Array schreiben
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 10.08.2011, 08:41     Titel:
  Antworten mit Zitat      
hex2dec mag die Leerzeichen nicht, weshalb du deinen Vektor x damit nicht einfach in dezimal umwandeln kannst. Deshalb lasse ich sie weg und lade immer 4 aufeinanderfolgende hex Werte (Fehler von mir: 2 Byte oder 16 Bit) in eine Zeile vec.

@eupho: ich schreibe immer 4 hex werte nebeneinander Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
Chris2011

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.08.2011, 08:54     Titel:
  Antworten mit Zitat      
Ok. Habs kapiert Smile

Vielen Dank für die Hilfe!
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 10.08.2011, 09:05     Titel:
  Antworten mit Zitat      
Aber danke für den die Vereinfachung eupho...wieder was gelernt.

Die erste for-Schleife kann man somit auch dadurch ersetzen.

Code:
vec = transpose(reshape(strrep(x{1}, ' ', ''),4, 9))
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.