XOR 1字节(或半字节)或无符号Char Hex数组

时间:2019-04-17 18:17:19

标签: c

我正在尝试在已定义的十六进制数组中创建随机位错误。我的想法是将0x01、0x02、0x04或0x08的随机字节异或,这应该将有符号char数组中的一位翻转。但是我在打印未签名的char数组时遇到很多麻烦。

即使当我尝试简单的printf()时,我似乎也得到了元素+30。例如:

unsigned char randArray[] = "64F123C0";
printf("\nXor Value: %02x\n", randArray[2]);

结果:异或值:46

这似乎总是返回转换为十进制的十六进制值(0x0F-> 16),该值加到30。有人可以解释为什么会发生这种情况,以及如何从此无符号char数组中显示1个字节或1个半字节吗?

无论如何,这是我将随机错误注入到无符号十六进制字符数组中的代码:

unsigned char randArray[] = "64F123C0";
unsigned char testXor[] = {0x01, 0x02, 0x04, 0x08};

srand(time(0));

int randomError = 0;
int randomInjectNib = 0;


randomError = rand()%5;
randomInjectNib = rand()%8;

printf("\nThe Error Injected Byte is: %c and it was: %c\n\n", randArray[randomInjectNib]^testXor[randomError], randArray[randomInjectNib])

由于在打印上述数组中的字节时遇到的问题,我在这里打印%c。

我希望结果看起来像这样:

unsigned char randArray[] = "64F123C0";
unsigned char testXor[] = {0x01, 0x02, 0x04, 0x08};

printf("\nThe Error Injected Byte is: %c and it was: %c\n\n", randArray[2]^testXor[2], randArray[2])

结果:错误注入字节为D,为F

0 个答案:

没有答案
相关问题