aboutsummaryrefslogtreecommitdiff
path: root/q3/checksum.c
diff options
context:
space:
mode:
Diffstat (limited to 'q3/checksum.c')
-rw-r--r--q3/checksum.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/q3/checksum.c b/q3/checksum.c
new file mode 100644
index 0000000..513ae17
--- /dev/null
+++ b/q3/checksum.c
@@ -0,0 +1,37 @@
1#include <stdio.h>
2#include <stdio.h>
3
4int checksum() {
5 unsigned int parts[9];
6 unsigned int sum;
7 printf("Enter the parts, one per line:\n");
8 for (int i = 0; i < 9; i++) {
9 scanf("%X", &parts[i]);
10 sum += parts[i];
11 while (sum >> 16)
12 sum = (sum & 0xffff) + (sum >> 16);
13 }
14 return ~sum;
15}
16
17int main() {
18 printf("--- SENDER ---\n");
19 int sender_checksum = checksum();
20 printf("\n--- RECV ---\n");
21 int recv_checksum = checksum();
22 printf("Sent checksum: %x\n", sender_checksum);
23 printf("Recieved checksum: %x\n", recv_checksum);
24 if (sender_checksum == recv_checksum) {
25 printf("Matching checksums!\n");
26 return 0;
27 } else {
28 printf("Mismatched checksums!\n");
29 return 0;
30 }
31}
32
33// 00004500 00000073 00000000 00004000 00004011 0000c0a8 00000001 0000c0a8 000000c7
34// checksum - ffffb861
35
36// 00004500 0000003c 00001c46 00004000 00004006 0000ac10 00000a63 0000ac10 00000a0c
37// checksum - 0000b1e6