XOR 1 байт (или Nibble) или массив без знака Char Hex - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь создать случайную битовую ошибку в определенном шестнадцатеричном массиве.Моя идея состоит в том, чтобы сделать 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...