#include // Type definitions typedef unsigned short w16; // 16-bit word is a short int typedef unsigned long w32; // 32-bit word is a long int // Prototypes w16 checksum(w16 len, w16 buff[]); /* *************************************************************************hi Function: checksum Description: Calculate the 16 bit Internet Checksum. *************************************************************************** */ w16 checksum(w16 len, w16 buff[]) { w16 word16; w32 sum=0; w16 i; // make 16 bit words out of every two adjacent 8 bit words in the packet // and add them up // u16 buff[] is an array containing all the octets in the data. for (i=0;i>16) sum = (sum & 0xFFFF)+(sum >> 16); // one's complement the result sum = ~sum; return ((w16) sum); } int main(void) { w16 octets = 4; w16 result; w16 buffer[]={0xBE,0xBE,0xC0,0xCA}; result = checksum(octets,(w16 *)buffer); // Output the checksum printf("checksum = %04X \n", result); return(0); }