Difference between revisions of "UVSGXOR"
Jump to navigation
Jump to search
Line 3: | Line 3: | ||
<code> | <code> | ||
− | #import <stdio.h> | + | #import <stdio.h> |
− | + | ||
− | int main(int argc, char *argv[]) { | + | int main(int argc, char *argv[]) { |
int i=0, j, checksum; | int i=0, j, checksum; | ||
char *buf = "<PUT AN EXAMPLE COMMAND HERE>"; | char *buf = "<PUT AN EXAMPLE COMMAND HERE>"; | ||
Line 26: | Line 26: | ||
printf("\n%02x\n", checksum); | printf("\n%02x\n", checksum); | ||
− | }</code> | + | } |
+ | </code> |
Revision as of 01:52, 30 November 2010
This code simply returns the initial checksum of a UVSG command, provided you (1) give it a sample command that ends in $00 <checksum> and (2) strip off the 55 AA at the beginning. It's probably poorly written, but it works.
#import <stdio.h>
int main(int argc, char *argv[]) {
int i=0, j, checksum;
char *buf = "<PUT AN EXAMPLE COMMAND HERE>";
char *hexPtr = buf;
unsigned int *result = calloc(strlen(buf)/2 + 1, sizeof *result);
while (sscanf(hexPtr, "%02x", &result[i++])) {
hexPtr += 2;
if (hexPtr >= buf + strlen(buf)) break;
}
for (j = i; j > -1; j--) {
if (j == (i-1)) {
checksum = (int)result[j];
}
if (j < (i-1)) {
checksum = checksum ^ (int)result[j];
}
}
printf("\n%02x\n", checksum);
}