unsigned int integerCast(long int value) { int newValue; // cast it to an int newValue = (int)value; // calculate absolute value (so we can use it as an array index) newValue = abs(newValue); // return it, also compressing it, to minimize memory use for the array return (newValue % NMAX); } unsigned long compSumHash(long int value) { // vars to hold the currently worked on component // and the accumulated hash unsigned short int thisComponent, summedComponents; const int bytesIn16Bits = 2; const int bitsInByte = 8; char key[20]; char *ptr; int i, j; int bufLen; int padding; sprintf(key, "%x", value); ptr = key; // get number of chars in our key bufLen = strlen(key); // work out if string is even or odd number of bytes in length. // if it's odd, we need to add padding padding = bufLen % 2; // zero our working vars summedComponents = thisComponent = 0; // if we have an even number of chars in the string, just use // the non-zero chars to calculate the result. // If, on the other hand, there are an odd number of chars, then // we also use the terminating null. // printf("Component Sum loop start\n"); for (i=0; i<(bufLen+padding)/bytesIn16Bits; i++) { thisComponent = 0; for (j=0; j