C Как сделать XOR между беззнаковыми указателями int - PullRequest
0 голосов
/ 08 июня 2018

У меня есть два неподписанных int-указателя с 32-разрядным, и я хочу выполнить операцию XOR между этими беззнаковыми указателями.

char* a = "01110011011100100110111101000011";
char* b = "10111001100011001010010110111101";
unsigned* au = (unsigned*) a;
unsigned* bu = (unsigned*) b;
unsigned* cu = a ^ b;

Ошибка:

 invalid operands to binary ^ (have ‘unsigned int *’ and ‘unsigned int *’)

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

У вас есть строки, а не целые числа без знака.Вам нужно будет преобразовать их в целые числа без знака, прежде чем вы сможете выполнять над ними побитовые операции:

char* a = "01110011011100100110111101000011";
char* b = "10111001100011001010010110111101";
unsigned au = strtoul(a, 0, 2);
unsigned bu = strtoul(b, 0, 2);
unsigned cu = a ^ b;
0 голосов
/ 08 июня 2018

Ваш код должен работать немного сложнее, чтобы справиться с этим.

  1. Перебирать строки.
  2. Вытягивать цифры из цифр.
  3. ВыполнитьXOR между числами.
  4. Преобразование числа в цифру.
  5. Добавление результирующей цифры к выходу.

char str1[] = "01110011011100100110111101000011";
char str2[] = "10111001100011001010010110111101";
char* p1 = str1;
char* p2 = str2;
for ( ; *p1 != '\0' && *p2 != '\0'; ++p1, ++p2 )
{
   unsigned int n1 = *p1 - '0';
   unsigned int n2 = *p2 - '0';
   unsigned int n = n1 ^ n2;
   char c = n + '0';

   // Now you can change either a or be to contain the output.
   *p1 = c;
}

// At this point, str1 should contain a string that looks like you performed an XOR between str1 and str2.
...