关于 异或运算的 疑惑
char* INPUT_FNGPRT(char P1,char P2,char P3,char index )
{
char P[3]={P1,P2,P3};
char num[1]={index};
char INPUT_FP[8]={0},Head[1]={0xF5},End[1]={0xF5},Reserves[1]={0x00};
char CHK[1]={0x00},ck=0;
memcpy(INPUT_FP,Head,1);//帧头
memcpy(INPUT_FP+1,&num[0],1);
memcpy(INPUT_FP+2,&P[0],1);
memcpy(INPUT_FP+3,&P[1],1);
memcpy(INPUT_FP+4,&P[2],1);
memcpy(INPUT_FP+5,Reserves,1);
for(ck=1;ck<6;ck++)//命令第二字节到len-2字节的异或值
CHK[0]=CHK[0]^INPUT_FP[i];
CHK[0]=INPUT_FP[1]^INPUT_FP[2]^INPUT_FP[3]^INPUT_FP[4]^INPUT_FP[5];memcpy(INPUT_FP+6,CHK,1);
memcpy(INPUT_FP+7,End,1);
return INPUT_FP;
}
INPUT_FNGPRT(0,1,1,1);
INPUT_FNGPRT(0,1,1,2);
INPUT_FNGPRT(0,1,1,3);
为什么
for(ck=1;ck<6;ck++)//命令第二字节到len-2字节的异或值
CHK[0]=CHK[0]^INPUT_FP[i];
和
CHK[0]=INPUT_FP[1]^INPUT_FP[2]^INPUT_FP[3]^INPUT_FP[4]^INPUT_FP[5];
CHK[0]最后的结果不一样?
任何数与0异或,得到结果不都是自己本身吗?
“
按位异或:
^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1 ”
[解决办法]
CHK[0]=CHK[0]^INPUT_FP[i];
这句的 “ i ”应该改为 “ ck ”