Here you can find the source of atol(byte[] s)
public static long atol(byte[] s) throws NumberFormatException
//package com.java2s; /*//from w w w .ja v a2 s. c o m * Copyright (c) 2008-2016, GigaSpaces Technologies, Inc. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ public class Main { public static long atol(byte[] s) throws NumberFormatException { long result = 0; boolean negative = false; int i = 0, len = s.length; long limit = -Long.MAX_VALUE; long multmin; int digit; if (len > 0) { byte firstChar = s[0]; if (firstChar < '0') { // Possible leading "-" if (firstChar == '-') { negative = true; limit = Long.MIN_VALUE; } else throw new NumberFormatException(); if (len == 1) // Cannot have lone "-" throw new NumberFormatException(); i++; } multmin = limit / 10; while (i < len) { // Accumulating negatively avoids surprises near MAX_VALUE digit = Character.digit(s[i++], 10); if (digit < 0) { throw new NumberFormatException(); } if (result < multmin) { throw new NumberFormatException(); } result *= 10; if (result < limit + digit) { throw new NumberFormatException(); } result -= digit; } } else { throw new NumberFormatException(); } return negative ? result : -result; } }