2016-08-18 4 views
0

Ich habe eine Beispielstruktur, die zwei Datensätze hat. Die ersten Daten enthalten das folgende Hexadezimalfeld '00 7F 3F FF 08 FF 60 26 ' und dann, wenn ich es in binär und dann dezimal umwandle, bekomme ich eine korrekte Antwort, die ' 0 127 63 255 8 255 96 38 ' ist .Konvertieren eines hexadezimalen Array in Binär und dann in Dezimal

Allerdings habe ich einige Datenfelder, die nicht genau wie das erste angeordnet sind, sie sehen in etwa so aus '1 40 0 ​​F 00 40 00 47' und wenn ich versuche, diese Art von Datensätzen zu konvertieren Ergebnis ist ungenau. Ich bekomme so etwas '64 0 64 0 71 ' während das erwartete Ergebnis ist ' 1 64 0 15 0 64 0 71 '.

Dies ist mein Code mit Beispieldaten:

%% Structure 


a(1).Id = 118; 
a(1).Data = '00 7F 3F FF 08 FF 60 26'; 

a(2).Id = 108; 
a(2).Data = '1 40 0 F 00 40 00 47'; 



%% Hexadecimal (Data) --> Binary --> Decimal 

Data = a(2).Data;   
str = regexp(Data,' ','split'); 
Ind = cellfun(@length,str); 
str = str(Ind==2); 

%Hex to Binary 
binary = hexToBinaryVector(str,8,'MSBFirst'); 

%Binary to Decimal 
Decimal = bi2de(binary,'left-msb'); 

Jede Hilfe wird sehr geschätzt werden!

+0

Warum die Zwischenkonvertierung in binär? – Adriaan

+1

Nun, Sie erhalten 64 0 64 0 71, weil Sie 'str = str (Ind == 2)' tun, so dass nur Länge = 2 Strings in hexToBinaryVector eingegeben werden. 2 Dinge, die Sie berücksichtigen können, versuchen, was passiert, wenn Sie 1 Ziffer in hexToBinaryVector übergeben und sehen, ob funktioniert oder eine 0 an der linken Seite von str hinzufügen (Ind == 1) – GameOfThrows

+0

@Adriaan: Ich brauche die Binärdaten für die weitere Analyse – user161816

Antwort

0

Zugabe von 2 Zeilen sollten den Trick:

str = regexp(Data,' ','split'); 
Ind = cellfun(@length,str); 
str(Ind==1) = strcat('0',str(Ind==1)); 
Ind = cellfun(@length,str); 
str = str(Ind==2); 

Alles, was es tut, wenn es einen String (Ihre Hex) sieht, die 1 Char ist, bringt es eine 0 Infront es, so richtig es in sein richtiges Format. Sie können dies in der Zelle tun.