#include <stdio.h>
#include <string.h>
char checksum(char *Received) {
char *star = Received;
char *delim1 = "&";
char *delim2 = "*";
char result = 0;
while (1) {
char *ptr
= strtok(star
, delim1
); if (!ptr) {
break;
}
if (!star) {
break;
}
printf("ptr = %s star = %s\n", ptr
, star
); if (ptr == star) {
break;
}
for (char *p = ptr; *p; p++) {
result ^= *p; // XOR them into the result
}
}
return result;
}
int main(void) {
char str1[] = "foo &abcdef*bar&12345*xxx";
char str2[] = "blah &wxyz*xxx&0987*qwerty&ppppp*x";
char cs1 = checksum(str1);
char cs2 = checksum(str2);
printf("checksum 1 = %d checksum 2 = %d\n", cs1
, cs2
); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCmNoYXIgY2hlY2tzdW0oY2hhciAqUmVjZWl2ZWQpIHsKICAgIGNoYXIgKnN0YXIgPSBSZWNlaXZlZDsKICAgIGNoYXIgKmRlbGltMSA9ICImIjsKICAgIGNoYXIgKmRlbGltMiA9ICIqIjsKICAgIGNoYXIgcmVzdWx0ID0gMDsKCiAgICB3aGlsZSAoMSkgewogICAgICAgIGNoYXIgKnB0ciA9IHN0cnRvayhzdGFyLCBkZWxpbTEpOwogICAgICAgIGlmICghcHRyKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBzdGFyID0gc3RydG9rKE5VTEwsIGRlbGltMik7CiAgICAgICAgaWYgKCFzdGFyKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBwcmludGYoInB0ciA9ICVzIHN0YXIgPSAlc1xuIiwgcHRyLCBzdGFyKTsKICAgICAgICBpZiAocHRyID09IHN0YXIpIHsKICAgICAgICAJYnJlYWs7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGZvciAoY2hhciAqcCA9IHB0cjsgKnA7IHArKykgeyAKICAgICAgICAgICAgcmVzdWx0IF49ICpwOyAvLyBYT1IgdGhlbSBpbnRvIHRoZSByZXN1bHQKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0Owp9CgppbnQgbWFpbih2b2lkKSB7CgljaGFyIHN0cjFbXSA9ICJmb28gJmFiY2RlZipiYXImMTIzNDUqeHh4IjsKCWNoYXIgc3RyMltdID0gImJsYWggJnd4eXoqeHh4JjA5ODcqcXdlcnR5JnBwcHBwKngiOwoJY2hhciBjczEgPSBjaGVja3N1bShzdHIxKTsKCWNoYXIgY3MyID0gY2hlY2tzdW0oc3RyMik7CglwcmludGYoImNoZWNrc3VtIDEgPSAlZCBjaGVja3N1bSAyID0gJWRcbiIsIGNzMSwgY3MyKTsKCXJldHVybiAwOwp9Cg==