我正在尝试在已定义的十六进制数组中创建随机位错误。我的想法是将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