Data Structures, Algorithms, & Applications in Java
Chapter 11, Exercise 15

The code is given below.


public class ConvertString2
{
   /** fold c into two 8-bit segments and add */
   private static int fold(char c)
   {
      // convert into an integer
      int i = (int) c;

      // extract least significant 8 bits
      int least8 = i % 256;

      // extract most significant 8 bits
      int most8 = i / 256;

      return least8 + most8;
   }

   /** covert string s into an integer that depends on all
     * characters of s */
   public static int integer(String s)
   {
      int length = s.length();   // number of characters in s
      int answer = 0;

      for (int i = 0; i < length; i += 4)
      {// do four characters at a time
         answer += fold(s.charAt(i));

         try  // do three more characters if they exist
         {
            answer += fold(s.charAt(i + 1)) << 8;
            answer += fold(s.charAt(i + 2)) << 16;
            answer += fold(s.charAt(i + 3)) << 24;
         }
         catch (StringIndexOutOfBoundsException e)
         {// ignore the exception
         }
      }

      return (answer < 0) ? -answer : answer;
   }
}