zoukankan      html  css  js  c++  java
  • atoi() & itoa()函数的内部的实现 2

    /***
    *atox.c - atoi and atol conversion
    *
    * Copyright (c) 1989-1997, Microsoft Corporation. All rights reserved.
    *
    *Purpose:
    * Converts a character string into an int or long.
    *
    *******************************************************************************/
    
    #include <cruntime.h>
    #include <stdlib.h>
    #include <ctype.h>
    
    /***
    *long atol(char *nptr) - Convert string to long
    *
    *Purpose:
    * Converts ASCII string pointed to by nptr to binary.
    * Overflow is not detected.
    *
    *Entry:
    * nptr = ptr to string to convert
    *
    *Exit:
    * return long int value of the string
    *
    *Exceptions:
    * None - overflow is not detected.
    *
    *******************************************************************************/
    
    long __cdecl atol(
    const char *nptr
    )
    {
    int c; /* current char */
    long total; /* current total */
    int sign; /* if ''-'', then negative, otherwise positive */
    
    /* skip whitespace */
    while ( isspace((int)(unsigned char)*nptr) )
    ++nptr;
    
    c = (int)(unsigned char)*nptr++;
    sign = c; /* save sign indication */
    if (c == ''-'' || c == ''+'')
    c = (int)(unsigned char)*nptr++; /* skip sign */
    
    total = 0;
    
    while (isdigit(c)) {
    total = 10 * total + (c - ''0''); /* accumulate digit */
    c = (int)(unsigned char)*nptr++; /* get next char */
    }
    
    if (sign == ''-'')
    return -total;
    else
    return total; /* return result, negated if necessary */
    }
    
    
    /***
    *int atoi(char *nptr) - Convert string to long
    *
    *Purpose:
    * Converts ASCII string pointed to by nptr to binary.
    * Overflow is not detected. Because of this, we can just use
    * atol().
    *
    *Entry:
    * nptr = ptr to string to convert
    *
    *Exit:
    * return int value of the string
    *
    *Exceptions:
    * None - overflow is not detected.
    *
    *******************************************************************************/
    
    int __cdecl atoi(
    const char *nptr
    )
    {
    return (int)atol(nptr);
    }
    
    #ifndef _NO_INT64
    
    __int64 __cdecl _atoi64(
    const char *nptr
    )
    {
    int c; /* current char */
    __int64 total; /* current total */
    int sign; /* if ''-'', then negative, otherwise positive */
    
    /* skip whitespace */
    while ( isspace((int)(unsigned char)*nptr) )
    ++nptr;
    
    c = (int)(unsigned char)*nptr++;
    sign = c; /* save sign indication */
    if (c == ''-'' || c == ''+'')
    c = (int)(unsigned char)*nptr++; /* skip sign */
    
    total = 0;
    
    while (isdigit(c)) {
    total = 10 * total + (c - ''0''); /* accumulate digit */
    c = (int)(unsigned char)*nptr++; /* get next char */
    }
    
    if (sign == ''-'')
    return -total;
    else
    return total; /* return result, negated if necessary */
    }
    
    #endif /* _NO_INT64 */
    
    
    #include <msvcrt/errno.h>
    #include <msvcrt/stdlib.h>
    #include <msvcrt/internal/file.h>
    char* _itoa(int value, char* string, int radix)
    {
    char tmp[33];
    char* tp = tmp;
    int i;
    unsigned v;
    int sign;
    char* sp;
    
    if (radix > 36 || radix <= 1)
    {
    __set_errno(EDOM);
    return 0;
    }
    
    sign = (radix == 10 && value < 0);
    if (sign)
    v = -value;
    else
    v = (unsigned)value;
    while (v || tp == tmp)
    {
    i = v % radix;
    v = v / radix;
    if (i < 10)
    *tp++ = i+''0'';
    else
    *tp++ = i + ''a'' - 10;
    }
    
    if (string == 0)
    string = (char*)malloc((tp-tmp)+sign+1);
    sp = string;
    
    if (sign)
    *sp++ = ''-'';
    while (tp > tmp)
    *sp++ = *--tp;
    *sp = 0;
    return string;
    }

  • 相关阅读:
    环境配置文件 ① /etc/profile、② ~/.bash_profile、③ ~/.bashrc、④ /etc/bashrc
    RHEL 7.0已发布CentOS 7即将到来
    《上海交通大学饮水思源paper(论文)板实用手册(第二版)》出炉
    SCI论文投稿Cover Letter的写作
    grub.cfg —— Window、Fedora、CentOS
    SCI新手成长策略
    计算机类SCI前三区期刊
    SCI期刊——导航
    SCI收录的外文期刊(计算机类)
    《嵌入式开发》——三次作业
  • 原文地址:https://www.cnblogs.com/black/p/5171591.html
Copyright © 2011-2022 走看看