现在问题主要是出现在这一句。。
b[--i]=a[j]^a[--j]
注意啦。。编译器编译的时候是从后向前的。。也就是先算a[--j],这样j就先自减了。。j从3变为2。。然后再算a[j],因为j是2,调用的时候,就是调a[2]
所以整个语句第一次执行的时候就是b[2]=a[2]^a[2],结果显然是0;
所以输出的是1100
你是打算对数字进行异或,需要将字符变成数字,异或完后再变回字符我只简单写了一下,没有异常处理,顺便说你b中F少了一个
#include <stdio.h>
int ctoi(char c)
{
if(c>='0'&&c<='9')
return c-48
else if(c>='A'&&c<='F')
return c-55
else if(c>='a'&&c<='f')
return c-87
else
return -1
}
char itoc(int i)
{
if(i>=0&&i<=9)
return i+48
else if(i>=10&&i<=15)
return i+55
else
return 0
}
int main()
{
char *a="0000400000123456"
char *b="0592389FFFFFFFFF"
char *c="0000000000000000"
int i=0
int ai,bi,ci
while(a[i])
{
ai=ctoi(a[i])
bi=ctoi(b[i])
ci=ai^bi
c[i]=itoc(ci)
i++
}
printf("%s\
",c)
return 0
}