2017-05-29 54 views
3

我想將C中的無符號字符轉換爲matlab代碼,無符號字符的向量用十六進制值填充。下面的C代碼:將C中的無符號字符轉換爲MatLab

int main() 
{ 
    unsigned char value = 0xaa; 
    signed char temp; 
    // cast to signed value 
    temp = (signed char) value; 
    // if MSB is 1, then this will signed extend and fill the temp variable with 1's 
    temp = temp >> 7; 
    // AND with the reduction variable 
    temp = temp & 0x1b; 
    // finally shift and reduce the value 
    printf("%u",((value << 1)^temp)); 
} 

,我創建做同樣的事情MATLAB函數:

value = '0xaa'; 
temp = int8(value); 
temp2 = int8(value); 
temp = bitsra(temp,7); 
temp = and(temp,'0x1b'); 
galois_value = xor(bitsll(temp2,1),temp); 
disp(galois_value); 

打印的值在每個代碼不同,有人知道發生了什麼事?

+0

注意,你的C代碼依賴於實現定義的行爲;一個明確的方式來做我想你打算的將是'unsigned int temp =(value> SCHAR_MAX?0x1b:0);' –

+0

這不是問題,C代碼是德州儀器的庫,用於MSP430系列MCU。我需要在MatLab中實現C代碼來比較性能,因爲我無法更改C代碼。 –

回答

2

您已經創建了一個字符串:

value = '0xaa'; 

4個字符,['0' 'x' 'a' 'a']

在MATLAB中,你通常不會處理變量逐位,但如果你想嘗試:

temp = int8(hex2dec('aa')); 
+0

我可以用它來轉換char的整個向量嗎?像'char = {'aa,bb,cc'}'然後'temp = int8(hex2dec(char));' –

+0

當我在MatLab中打印值時,我總是得到'11',C代碼給了我'335 ',爲什麼'galois_value'變量得到一個邏輯值? –

+1

@IAGOSESTREMOchoa您遇到問題:您正在嘗試逐行翻譯程序。不要這樣做,尤其是在語言如此不同的情況下。嘗試獲得相同的功能,但使用每種語言的最佳方法。通過閱讀MATLAB函數的文檔可以解答你的問題。 –

相關問題