+1 678 648 4277 
Table Of Contents
  • C program that computes a simple checksum of 10 8-bit integers.

C program that computes a simple checksum of 10 8-bit integers.

This program is based upon the calculation of the checksum value of a IPv4 header, defined by RFC791.
Your C program should conform to the following specification:
• Program name: checksum
• Reads 10 bytes from standard input (stdin), using the 'read' system call
• Interpets or casts each of these bytes as an integer value in the range of 0..2^8-1 (I.e., 0..255).
• Via a loop, examines each of these bytes in turn,
o computes the running 1's complement sum for 8-bit numbers
o saves the 6th byte into a variable called "checksum", and use the value of zero (0) instead for the calculation of the sum
• Performs the one's complement of the final sum and saves this value to a variable called "complement"
• Outputs the value of "checksum" and "complement" to standard output (stdout) via the printf C library call
• If the value of "checksum" and "complement" are not the same, outputs the string "Error Detected!" to standard error (stderr).
Starter code
#include "stdio.h"
#include "stdlib.h"
#define max_int (255)
#define byte (char)
int main (intargc, char * argv[], char ** envp) {
int count = 10;
int sum = 0;
byte checksum;
byte complement;
  /* the following is the prototype for the read system call */
  /* intread(intfildes, void *buf, size_tnbyte); */
fprintf(stdout, "Stored Checksum: %d, Computed Checksum: %d\n", checksum, complement);
if (checksum != complement ) {
fprintf(stderr, "Error Detected!\n");
return 1;
  }
return 0;
}
 Code Solution
#include <stdio.h>
#include <stdlib.h>
#define max_int 255
#define byte char
int main (intargc, char * argv[], char ** envp) {
int count = 10;
int sum = 0;
byte checksum;
byte complement;
  /* the following is the prototype for the read system call */
  /* intread(intfildes, void *buf, size_tnbyte); */
unsigned char input[10];
inti;
intnum;
  /* read the 10 bytes */
for (i = 0; i< count; i++) {
scanf("%d", &num);
input[i] = num;
  }
for (i = 0; i< count; i++) {
if (i == 5) /* if 6th byte*/
checksum = input[i]; /* use as checksum */
else {
sum += input[i]; /* add to sum */
if (sum >max_int) { /* overflow */
sum = (sum & 0xFF) + 1; /* add carry */
      }
    }
  }
complement = ~sum; /* take one's complement */
fprintf(stdout, "Stored Checksum: %d, Computed Checksum: %d\n", checksum, complement);
if (checksum != complement ) {
fprintf(stderr, "Error Detected!\n");
return 1;
  }
return 0;
}