首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

关于 异或运算的 疑惑,该怎么解决

2012-03-22 
关于 异或运算的 疑惑char* INPUT_FNGPRT(char P1,char P2,char P3,char index ){char P[3]{P1,P2,P3}ch

关于 异或运算的 疑惑
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 ”

热点排行