Tuesday, September 6, 2011

Converting between integers and text (part 2)

Parsing an integer from text

Parsing an integer is relatively simple depending on how many checks you make. This loop does almost no validation. The input can multiple '-' signs and the number can overflow. As soon as it reaches a character is does not accept to stops. It is left to the caller to check if this character was a valid separartor.

ByteBufferTextLongReader.read()
long num = 0;
boolean negative = false;
while (true) {
    byte b = buffer.get();
//  if (b >= '0' && b <= '9')
    if ((b - ('0' + Integer.MIN_VALUE)) <= 9 + Integer.MIN_VALUE)
        num = num * 10 + b - '0';
    else if (b == '-')
        negative = true;
    else
        break;
}
return negative ? -num : num;
Note: The expression (b >= '0' && b <= '9') has been re-written taking advantage of an underflow to turn this into one comparison.

To follow...

Converting floating point numbers to text

No comments:

Post a Comment