2016-08-18 143 views
0

我有一個有兩組數據的示例結構。第一個數據包含以下十六進制數組:'00 7F 3F FF 08 FF 60 26'然後當我將它轉換成二進制,然後小數我得到一個正確的答案是'0 127 63 255 8 255 96 38'將十六進制數組轉換爲二進制然後轉換爲十進制

但是,我有一些數據數組並沒有像第一個那樣完全排列,他們看起來像這樣,當我嘗試轉換這些數據集時,結果不準確。我得到這樣的東西'64 0 64 0 71',而預期的結果是'1 64 0 15 0 64 0 71'

這是我的代碼以一個簡單的數據:

%% 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'); 

任何幫助將非常感激!

+0

爲什麼中間轉換爲二進制? – Adriaan

+1

好吧,你得到64 0 64 0 71,因爲你正在做'str = str(Ind == 2)',所以只有長度= 2的字符串被輸入到hexToBinaryVector。 2你可以考慮的事情,嘗試當你將1位數字傳入hexToBinaryVector並查看是否有效或在str的左邊添加0(Ind == 1) – GameOfThrows

+0

@Adriaan:我需要二進制數據作進一步分析 – user161816

回答

0

加入2行應該做的伎倆:

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

所有它做的是,當它看到一個String(十六進制),即1字符,它把一個0盈方的,所以正確的成它的正確格式。你可以在cellfun中做到這一點。

相關問題