亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? strtoq.c

?? C標準庫源代碼,能提高對C的理解,不錯的哦
?? C
字號:
/***
*strtoq.c - Contains C runtimes strtoq and strtouq
*
*       Copyright (c) 1989-1997, Microsoft Corporation. All rights reserved.
*       Copyright (c) 1992, Digital Equipment Corporation.
*
*Purpose:
*       strtoq - convert ascii string to QUAD (signed quad) integer
*       strtouq - convert ascii string to UQUAD (unsigned quad) integer
*
*******************************************************************************/

#include <cruntime.h>
#include <stdlib.h>
#include <limits.h>
#include <errno.h>
#include <ctype.h>

typedef __int64 quad;
typedef unsigned __int64 uquad;

#define QUAD_MIN  (-9223372036854775807i64) /* minimum (signed) quad value */
#define QUAD_MAX  ( 9223372036854775807i64) /* maximum (signed) quad value */
#define UQUAD_MAX ((uquad)0xffffffffffffffffi64) /* maximum unsigned quad value */

/***
*strtoq, strtouq(nptr,endptr,ibase) - Convert ascii string to QUAD un/signed
*       int.
*
*Purpose:
*       Convert an ascii string to a 64-bit quad value.  The base
*       used for the caculations is supplied by the caller.  The base
*       must be in the range 0, 2-36.  If a base of 0 is supplied, the
*       ascii string must be examined to determine the base of the
*       number:
*               (a) First char = '0', second char = 'x' or 'X',
*                   use base 16.
*               (b) First char = '0', use base 8
*               (c) First char in range '1' - '9', use base 10.
*
*       If the 'endptr' value is non-NULL, then strtoq/strtouq places
*       a pointer to the terminating character in this value.
*       See ANSI standard for details
*
*Entry:
*       nptr == NEAR/FAR pointer to the start of string.
*       endptr == NEAR/FAR pointer to the end of the string.
*       ibase == integer base to use for the calculations.
*
*       string format: [whitespace] [sign] [0] [x] [digits/letters]
*
*Exit:
*       Good return:
*               result
*
*       Overflow return:
*               strtoq -- QUAD_MAX or QUAD_MIN
*               strtouq -- UQUAD_MAX
*               strtoq/strtouq -- errno == ERANGE
*
*       No digits or bad base return:
*               0
*               endptr = nptr*
*
*Exceptions:
*       None.
*******************************************************************************/

/* flag values */
#define FL_UNSIGNED   1       /* strtouq called */
#define FL_NEG        2       /* negative sign found */
#define FL_OVERFLOW   4       /* overflow occured */
#define FL_READDIGIT  8       /* we've read at least one correct digit */

static uquad __cdecl strtoxq (
        const char *nptr,
        const char **endptr,
        int ibase,
        int flags
        )
{
        const char *p;
        char c;
        uquad number;
        unsigned digval;
        uquad maxval;

        p = nptr;                       /* p is our scanning pointer */
        number = 0;                     /* start with zero */

        c = *p++;                       /* read char */
        while ( isspace((int)(unsigned char)c) )
                c = *p++;               /* skip whitespace */

        if (c == '-') {
                flags |= FL_NEG;        /* remember minus sign */
                c = *p++;
        }
        else if (c == '+')
                c = *p++;               /* skip sign */

        if (ibase < 0 || ibase == 1 || ibase > 36) {
                /* bad base! */
                if (endptr)
                        /* store beginning of string in endptr */
                        *endptr = nptr;
                return 0L;              /* return 0 */
        }
        else if (ibase == 0) {
                /* determine base free-lance, based on first two chars of
                   string */
                if (c != '0')
                        ibase = 10;
                else if (*p == 'x' || *p == 'X')
                        ibase = 16;
                else
                        ibase = 8;
        }

        if (ibase == 16) {
                /* we might have 0x in front of number; remove if there */
                if (c == '0' && (*p == 'x' || *p == 'X')) {
                        ++p;
                        c = *p++;       /* advance past prefix */
                }
        }

        /* if our number exceeds this, we will overflow on multiply */
        maxval = UQUAD_MAX / ibase;


        for (;;) {      /* exit in middle of loop */
                /* convert c to value */
                if ( isdigit((int)(unsigned char)c) )
                        digval = c - '0';
                else if ( isalpha((int)(unsigned char)c) )
                        digval = toupper(c) - 'A' + 10;
                else
                        break;
                if (digval >= (unsigned)ibase)
                        break;          /* exit loop if bad digit found */

                /* record the fact we have read one digit */
                flags |= FL_READDIGIT;

                /* we now need to compute number = number * base + digval,
                   but we need to know if overflow occured.  This requires
                   a tricky pre-check. */

                if (number < maxval || (number == maxval &&
                (uquad)digval <= UQUAD_MAX % ibase)) {
                        /* we won't overflow, go ahead and multiply */
                        number = number * ibase + digval;
                }
                else {
                        /* we would have overflowed -- set the overflow flag */
                        flags |= FL_OVERFLOW;
                }

                c = *p++;               /* read next digit */
        }

        --p;                            /* point to place that stopped scan */

        if (!(flags & FL_READDIGIT)) {
                /* no number there; return 0 and point to beginning of
                   string */
                if (endptr)
                        /* store beginning of string in endptr later on */
                        p = nptr;
                number = 0L;            /* return 0 */
        }
        else if ((flags & FL_OVERFLOW) || (!(flags & FL_UNSIGNED) &&
        (number & ((uquad)QUAD_MAX+1)))) {
                /* overflow occurred or signed overflow occurred */
                errno = ERANGE;
                if (flags & FL_UNSIGNED)
                        number = UQUAD_MAX;
                else
                        /* set error code, will be negated if necc. */
                        number = QUAD_MAX;
        }

        if (endptr != NULL)
                /* store pointer to char that stopped the scan */
                *endptr = p;

        if (flags & FL_NEG)
                /* negate result if there was a neg sign */
                number = (uquad)(-(quad)number);

        return number;                  /* done. */
}

quad __cdecl strtoq (
        const char *nptr,
        char **endptr,
        int ibase
        )
{
        return (quad) strtoxq(nptr, endptr, ibase, 0);
}

uquad __cdecl strtouq (
        const char *nptr,
        char **endptr,
        int ibase
        )
{
        return strtoxq(nptr, endptr, ibase, FL_UNSIGNED);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区主播在线| 国产精品自在欧美一区| 中文字幕一区二区三区四区| 精品久久久久av影院| 欧美一区二区三区四区高清| 欧美日韩国产另类不卡| 91精品国产综合久久福利| 91麻豆精品国产91久久久资源速度| 欧美顶级少妇做爰| 欧美成va人片在线观看| 久久综合九色欧美综合狠狠| 久久一留热品黄| 亚洲欧洲日本在线| 亚洲激情男女视频| 亚洲va国产va欧美va观看| 丝袜诱惑亚洲看片| 国模大尺度一区二区三区| 国产91精品在线观看| 色综合天天在线| 7777精品伊人久久久大香线蕉的 | 一区二区三区精品| 午夜不卡av免费| 国产主播一区二区| 白白色 亚洲乱淫| 欧美影院一区二区| 精品国产免费一区二区三区四区| 日本一区二区免费在线| 亚洲一区在线视频观看| 极品少妇xxxx精品少妇| 国产a级毛片一区| 欧美亚洲动漫精品| 久久蜜桃一区二区| 亚洲一区二区三区在线| 激情五月婷婷综合| 色狠狠色噜噜噜综合网| 精品国产91乱码一区二区三区| 国产日韩精品一区二区三区在线| 亚洲免费在线视频| 久久99精品国产麻豆不卡| 99久久精品一区二区| 欧美大尺度电影在线| 亚洲免费av在线| 国产综合成人久久大片91| 99久久国产免费看| 久久综合资源网| 亚洲r级在线视频| 成人短视频下载| 久久综合中文字幕| 日韩激情一二三区| 色猫猫国产区一区二在线视频| 欧美一区二区三区不卡| 一区二区三区日韩精品视频| 国内成人精品2018免费看| 欧美精品视频www在线观看| 中文字幕一区二区日韩精品绯色| 热久久国产精品| 色偷偷88欧美精品久久久| 国产亚洲综合色| 久久超碰97人人做人人爱| 欧美三级一区二区| 一区二区三区四区视频精品免费| 国产999精品久久久久久绿帽| 日韩欧美一区二区三区在线| 天堂成人国产精品一区| 欧美亚洲禁片免费| 亚洲综合视频网| 日本高清无吗v一区| 国产精品久久久久久久久免费相片 | 不卡影院免费观看| 精品对白一区国产伦| 三级久久三级久久| 欧美二区乱c少妇| 视频在线在亚洲| 欧美日韩国产综合一区二区 | 日本伦理一区二区| 亚洲女性喷水在线观看一区| av一本久道久久综合久久鬼色| 国产视频视频一区| 成人app在线| 亚洲色图一区二区三区| 91亚洲精品一区二区乱码| 专区另类欧美日韩| 欧美影片第一页| 亚洲成a人v欧美综合天堂| 欧美一级夜夜爽| 国产精品一级在线| 中文字幕在线不卡视频| 91福利在线看| 日本成人在线一区| 日韩欧美亚洲一区二区| 国内外精品视频| 国产精品久久看| 精品视频1区2区| 经典三级在线一区| ...xxx性欧美| 5月丁香婷婷综合| 国产精品亚洲一区二区三区在线| 国产精品视频观看| 欧美三级中文字| 国产一区二区三区免费观看| 国产精品护士白丝一区av| 欧美日韩高清不卡| 国内外成人在线| 一区二区三区蜜桃网| 日韩免费看的电影| av电影在线观看一区| 日韩在线a电影| 欧美激情一二三区| 777久久久精品| www.av亚洲| 喷白浆一区二区| 尤物在线观看一区| 精品久久久久一区二区国产| 色综合视频在线观看| 狠狠色丁香婷婷综合久久片| 一区二区国产视频| 国产日产欧美一区| 日韩亚洲欧美一区二区三区| av激情成人网| 国产在线视视频有精品| 一区二区三区四区国产精品| 国产亚洲va综合人人澡精品| 欧美精品视频www在线观看| 成人av综合一区| 久久99精品久久久久久| 亚洲国产精品久久人人爱| 国产精品久线在线观看| 久久这里只有精品首页| 欧美日韩mp4| 日本精品一级二级| 成人黄页毛片网站| 国产真实乱对白精彩久久| 日韩精彩视频在线观看| 亚洲影视在线播放| 亚洲精选视频在线| 国产精品全国免费观看高清 | 91福利资源站| k8久久久一区二区三区| 国产成a人亚洲| 国产乱子伦视频一区二区三区| 美女在线一区二区| 日本欧美大码aⅴ在线播放| 亚洲第一狼人社区| 亚洲一区在线视频观看| 亚洲与欧洲av电影| 亚洲午夜久久久久久久久电影院| 亚洲欧美日韩在线播放| 亚洲精品高清视频在线观看| 亚洲欧洲精品一区二区三区不卡 | 99久精品国产| aaa亚洲精品一二三区| av一二三不卡影片| 99视频精品免费视频| 成人av资源网站| 91一区在线观看| 在线观看日产精品| 欧美色手机在线观看| 欧美日韩免费在线视频| 欧美乱妇20p| 欧美日韩精品一区视频| 91精品久久久久久蜜臀| 91麻豆精品国产自产在线| 日韩欧美你懂的| 国产欧美日韩卡一| 18成人在线视频| 性做久久久久久| 国产真实乱对白精彩久久| 东方欧美亚洲色图在线| 99视频热这里只有精品免费| 欧洲精品视频在线观看| 欧美一区二区三区四区高清 | 国产精品久久久久婷婷二区次| 国产精品福利一区| 一区二区三区不卡在线观看| 首页综合国产亚洲丝袜| 国产精品一区2区| 91在线无精精品入口| 91麻豆精品国产| 久久精子c满五个校花| 亚洲精品乱码久久久久久日本蜜臀| 亚洲一区在线电影| 国产麻豆视频精品| 日本精品一区二区三区高清| 日韩欧美视频一区| 亚洲免费色视频| 九色|91porny| 在线观看欧美黄色| 国产亚洲精品bt天堂精选| 亚洲伊人伊色伊影伊综合网| 国内精品久久久久影院薰衣草| 99精品国产99久久久久久白柏| 欧美日韩一区视频| 国产女人18毛片水真多成人如厕| 一区av在线播放| 国产成人av网站| 欧美精品久久久久久久多人混战| 国产拍欧美日韩视频二区| 日韩成人精品视频| 一本一道综合狠狠老| 久久理论电影网|