C无符号int指针之间的XOR如何

时间:2018-06-07 22:00:22

标签: c arrays pointers xor unsigned

我有两个带32位的无符号int指针,我想在这些无符号指针之间进行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 :(得分:2)

你有字符串,而不是无符号整数。在对它们执行按位操作之前,您需要将它们转换为无符号整数:

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

答案 1 :(得分:1)

你的代码需要更加努力才能解决这个问题。

  1. 迭代字符串。
  2. 从数字中拉出数字。
  3. 在数字之间执行XOR。
  4. 将数字转换为数字。
  5. 将结果数字添加到输出中。
  6. 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.