2017-05-29 38 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函数的文档可以解答你的问题。 –

相关问题