关注this steps我写了我的函数来检查我扫描的标签的值是否正确,但它总是返回false。这是我的功能:
int checksum(const char* string)
{
int i;
char hexPairs[6][2];
long totXor;
// load matrix
for(i=0; i<6; i++)
{
hexPairs[i][0] = string[i*2];
hexPairs[i][1] = string[i*2+1];
}
// perform xor
totXor = strtol(hexPairs[0], NULL, 16);
for(i=1; i<5; i++)
{
totXor = totXor^strtol(hexPairs[i], NULL, 16);
}
return (totXor == strtol(hexPairs[5], NULL, 16));
}
我做错了什么?
我手动完成了二进制值的xor,以检查我扫描的是有效值。
EDITED
上面的代码不起作用,因为它在每对的末尾都没有'\ 0'。解决了这个问题,我的代码在CodeBlocks中运行,但在Vinculum II IDE中,我需要它才能工作,总是返回false。这是我尝试过的版本列表:
int checksum(const char* string)
{
int i;
char hexPairs[6][3];
long totXor = 0;
// load matrix
for(i=0; i<6; i++)
{
hexPairs[i][0] = string[i*2];
hexPairs[i][1] = string[i*2+1];
hexPairs[i][2] = '\0';
}
// perform xor
totXor = strtol(hexPairs[0], NULL, 16);
for(i=1; i<5; i++)
{
totXor = totXor^strtol(hexPairs[i], NULL, 16);
}
return (totXor == strtol(hexPairs[5], NULL, 16));
}
int checksum(const char* string)
{
int i;
char *hexPairs[6];
long totXor = 0, chk = 0;
// load matrix
for(i=0; i<6; i++)
{
hexPairs[i] = malloc(3);
memset(hexPairs[i], 0, 3);
hexPairs[i][0] = string[i*2];
hexPairs[i][1] = string[i*2+1];
}
// perform xor
totXor = strtol(hexPairs[0], NULL, 16);
for(i=1; i<5; i++)
{
totXor = totXor^strtol(hexPairs[i], NULL, 16);
}
chk = strtol(hexPairs[5], NULL, 16);
return (totXor == chk);
}
int checksum(const char* string)
{
char *hex0, *hex1, *hex2, *hex3, *hex4, *hexChk;
long totXor = 0, chk = 0;
hex0 = malloc(3);
hex1 = malloc(3);
hex2 = malloc(3);
hex3 = malloc(3);
hex4 = malloc(3);
hexChk = malloc(3);
memset(hex0, 0, 3);
memset(hex1, 0, 3);
memset(hex2, 0, 3);
memset(hex3, 0, 3);
memset(hex4, 0, 3);
memset(hexChk, 0, 3);
hex0[0] = string[0];
hex0[1] = string[1];
hex1[0] = string[2];
hex1[1] = string[3];
hex2[0] = string[4];
hex2[1] = string[5];
hex3[0] = string[6];
hex3[1] = string[7];
hex4[0] = string[8];
hex4[1] = string[9];
hexChk[0] = string[10];
hexChk[1] = string[11];
// perform xor
totXor = strtol(hex0, NULL, 16);
totXor = totXor^strtol(hex1, NULL, 16);
totXor = totXor^strtol(hex2, NULL, 16);
totXor = totXor^strtol(hex3, NULL, 16);
totXor = totXor^strtol(hex4, NULL, 16);
chk = strtol(hexChk, NULL, 16);
return (totXor == chk);
}
int checksum(const char* string)
{
char *hex0, *hex1, *hex2, *hex3, *hex4, *hexChk;
long totXor = 0, chk = 0;
hex0 = malloc(3);
hex1 = malloc(3);
hex2 = malloc(3);
hex3 = malloc(3);
hex4 = malloc(3);
hexChk = malloc(3);
memset(hex0, 0, 3);
memset(hex1, 0, 3);
memset(hex2, 0, 3);
memset(hex3, 0, 3);
memset(hex4, 0, 3);
memset(hexChk, 0, 3);
sprintf(hex0, "%c%c", string[0], string[1]);
sprintf(hex1, "%c%c", string[2], string[3]);
sprintf(hex2, "%c%c", string[4], string[5]);
sprintf(hex3, "%c%c", string[6], string[7]);
sprintf(hex4, "%c%c", string[8], string[9]);
sprintf(hexChk, "%c%c", string[10], string[11]);
// perform xor
totXor = strtol(hex0, NULL, 16);
totXor = totXor^strtol(hex1, NULL, 16);
totXor = totXor^strtol(hex2, NULL, 16);
totXor = totXor^strtol(hex3, NULL, 16);
totXor = totXor^strtol(hex4, NULL, 16);
chk = strtol(hexChk, NULL, 16);
return (totXor == chk);
}
我用这种方式调用函数:
if(!checksum("6D003D302040"))
{
return;
}
答案 0 :(得分:0)
<强>解决强>
我终于可以改变回报了。这是最后的功能:
int checksum(const char* string)
{
int i;
char *hexPairs[6];
long totXor = 0;
// load matrix
for(i=0; i<6; i++)
{
hexPairs[i] = malloc(3);
memset(hexPairs[i], 0, 3);
hexPairs[i][0] = string[i*2];
hexPairs[i][1] = string[i*2+1];
}
// perform xor
totXor = strtol(hexPairs[0], NULL, 16);
for(i=1; i<5; i++)
{
totXor = totXor^strtol(hexPairs[i], NULL, 16);
}
return ((totXor == strtol(hexPairs[5], NULL, 16)) ? 1 : 0);
}
似乎Vinculum不喜欢&#34; return(totXor == strtol(hexPairs [5],NULL,16));&#34;。
它不喜欢矩阵&#34; char hexPairs [6] [3];&#34;任