strtol.c
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:2k
源码类别:

通讯编程

开发平台:

Visual C++

  1. /* 
  2.  * strtol.c --
  3.  *
  4.  * Source code for the "strtol" library procedure.
  5.  *
  6.  * Copyright (c) 1988 The Regents of the University of California.
  7.  * Copyright (c) 1994 Sun Microsystems, Inc.
  8.  *
  9.  * See the file "license.terms" for information on usage and redistribution
  10.  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  11.  *
  12.  * RCS: @(#) $Id: strtol.c,v 1.4 2002/02/25 16:23:26 dgp Exp $
  13.  */
  14. #include <ctype.h>
  15. #include "tclInt.h"
  16. #include "tclPort.h"
  17. /*
  18.  *----------------------------------------------------------------------
  19.  *
  20.  * strtol --
  21.  *
  22.  * Convert an ASCII string into an integer.
  23.  *
  24.  * Results:
  25.  * The return value is the integer equivalent of string.  If endPtr
  26.  * is non-NULL, then *endPtr is filled in with the character
  27.  * after the last one that was part of the integer.  If string
  28.  * doesn't contain a valid integer value, then zero is returned
  29.  * and *endPtr is set to string.
  30.  *
  31.  * Side effects:
  32.  * None.
  33.  *
  34.  *----------------------------------------------------------------------
  35.  */
  36. long int
  37. strtol(string, endPtr, base)
  38.     CONST char *string; /* String of ASCII digits, possibly
  39.  * preceded by white space.  For bases
  40.  * greater than 10, either lower- or
  41.  * upper-case digits may be used.
  42.  */
  43.     char **endPtr; /* Where to store address of terminating
  44.  * character, or NULL. */
  45.     int base; /* Base for conversion.  Must be less
  46.  * than 37.  If 0, then the base is chosen
  47.  * from the leading characters of string:
  48.  * "0x" means hex, "0" means octal, anything
  49.  * else means decimal.
  50.  */
  51. {
  52.     register CONST char *p;
  53.     long result;
  54.     /*
  55.      * Skip any leading blanks.
  56.      */
  57.     p = string;
  58.     while (isspace(UCHAR(*p))) {
  59. p += 1;
  60.     }
  61.     /*
  62.      * Check for a sign.
  63.      */
  64.     if (*p == '-') {
  65. p += 1;
  66. result = -(strtoul(p, endPtr, base));
  67.     } else {
  68. if (*p == '+') {
  69.     p += 1;
  70. }
  71. result = strtoul(p, endPtr, base);
  72.     }
  73.     if ((result == 0) && (endPtr != 0) && (*endPtr == p)) {
  74. *endPtr = (char *) string;
  75.     }
  76.     return result;
  77. }