在C中将无符号字符转换为MatLab

4

我正在尝试将C语言中的无符号字符转换为Matlab代码,无符号字符向量填充了十六进制值。以下是C代码:

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

每一段代码中打印出来的值都不同,有人知道是怎么回事吗?

注意,你的 C 代码依赖于实现定义的行为;假设你想要的是一个明确定义的方法,那么可以这样写:unsigned int temp = (value > SCHAR_MAX ? 0x1b : 0); - M.M
这不是问题,C代码是得自德州仪器的库,用于MSP430系列微控制器。我需要在MatLab中实现C代码以比较性能,因此我不能更改C代码。 - user5410082
1个回答

1
您已创建一个字符串:

您的文本内容

value = '0xaa';

有4个字符,['0' 'x' 'a' 'a']

在MATLAB中,通常不会按位处理变量,但如果您想尝试,请使用以下方法:

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

我可以使用这个函数来转换整个字符向量吗?例如 char = {'aa,bb,cc'} 然后 temp = int8(hex2dec(char)); - user5410082
当我在MatLab中打印值时,我总是得到11,而C代码给出的是335,为什么galois_value变量会得到逻辑值? - user5410082
1
@IAGOSESTREMOchoa 你有一个问题:你正在尝试逐行翻译程序。不要这样做,特别是对于如此不同的语言。尝试使用每种语言的最佳方法来获得相同的功能。你的问题的答案可以通过阅读MATLAB函数的文档来解决。 - Ander Biguri
我注意到了,但正如我上面所说的,我需要在MatLAB中实现C代码以比较性能,因此这两个代码需要几乎相同。当我说比较性能时,是因为我正在MatLAB中模拟使用德州MCU的电力线通信系统,C代码来自德州,无法在MatLAB中使用。现在的问题是bitsra、and、xor返回逻辑值而不是像C代码一样的整数。我应该编辑问题以显示这一点吗? - user5410082
在谷歌上搜索“位异或 MATLAB”@IAGOSESTREMOchoa('bitxor') - Ander Biguri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接