Я пытаюсь создать случайную битовую ошибку в определенном шестнадцатеричном массиве.Моя идея состоит в том, чтобы сделать XOR случайным байтом с 0x01, 0x02, 0x04 или 0x08, который должен перевернуть один бит в массиве со знаком.Однако у меня много проблем с распечаткой моего массива unsigned char.
Даже когда я пробую простую функцию printf (), мне кажется, что элемент получает + 30. Например:
unsigned char randArray[] = "64F123C0";
printf("\nXor Value: %02x\n", randArray[2]);
Результат: Xor Значение: 46
Этовсегда кажется, что возвращается шестнадцатеричное значение, преобразованное в десятичное число (0x0F -> 16), добавленное к 30. Может ли кто-нибудь объяснить, почему это происходит и как отобразить 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